Skip to content

Commit d2f1b0a

Browse files
author
Antonis
committed
Fixed #657: Turn SignalingClient into normal class from singleton
1 parent 74e8773 commit d2f1b0a

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

restcomm.android.sdk/src/main/java/org/restcomm/android/sdk/RCDevice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ public boolean initialize(Context activityContext, HashMap<String, Object> param
506506
// check if TURN keys are there
507507
//params.put(RCDevice.ParameterKeys.MEDIA_TURN_ENABLED, prefs.getBoolean(RCDevice.ParameterKeys.MEDIA_TURN_ENABLED, true));
508508

509-
signalingClient = SignalingClient.getInstance();
509+
signalingClient = new SignalingClient();
510510
signalingClient.open(this, getApplicationContext(), parameters);
511511

512512
// Create and audio manager that will take care of audio routing,

restcomm.android.sdk/src/main/java/org/restcomm/android/sdk/SignalingClient/SignalingClient.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import java.util.HashMap;
3636

3737
/**
38-
* SignalingClient is a singleton that provides asynchronous access to lower level signaling facilities. Requests are sent typically from UI thread via methods
38+
* SignalingClient provides asynchronous access to lower level signaling facilities. Requests are sent typically from UI thread via methods
3939
* like open(), close(), etc towards signaling thread. Responses are received via Handler.handleMessage() (since this class is also a Handler)
4040
* from signaling thread and sent for further processing to SignalingClientListener listener for register/configuration specific
4141
* functionality and to SignalingClientCallListener listener for call related functionality. Hence, users of this API should implement
@@ -126,31 +126,43 @@ public interface UIMessageListener {
126126
}
127127

128128

129-
private static final SignalingClient instance = new SignalingClient();
129+
//private static final SignalingClient instance = new SignalingClient();
130130
SignalingClientListener listener;
131131
private static final String TAG = "SignalingClient";
132132

133133
// handler at signaling thread to send messages to
134-
SignalingHandlerThread signalingHandlerThread;
135-
Handler signalingHandler;
134+
private SignalingHandlerThread signalingHandlerThread;
135+
private Handler signalingHandler;
136136
//UIHandler uiHandler;
137-
Context context;
137+
private Context context;
138138
//HashMap<String, RCMessage> messages;
139+
//private boolean closePending = false;
140+
// 10 second timeout for SignalingClient.close()
141+
//static private final int CLOSE_TIMEOUT = 10000;
142+
private static boolean initialized = false;
139143

140144
// private constructor to avoid client applications to use constructor
141-
private SignalingClient()
145+
public SignalingClient()
142146
{
143147
super();
144148

149+
if (initialized) {
150+
throw new RuntimeException("SignalingClient already initialized");
151+
}
152+
145153
// create signaling handler thread and handler/signal
146154
signalingHandlerThread = new SignalingHandlerThread(this);
147155
signalingHandler = signalingHandlerThread.getHandler();
156+
157+
initialized = true;
148158
}
149159

160+
/*
150161
public static SignalingClient getInstance()
151162
{
152163
return instance;
153164
}
165+
*/
154166

155167
/**
156168
* Initialize the signaling facilities
@@ -280,6 +292,22 @@ public String close()
280292
Message message = signalingHandler.obtainMessage(1, signalingMessage);
281293
message.sendToTarget();
282294

295+
/*
296+
closePending = true;
297+
new Handler(getLooper()).postDelayed(
298+
new Runnable() {
299+
@Override
300+
public void run()
301+
{
302+
if (closePending) {
303+
RCLogger.w(TAG, "close() timeout: signaling thread didn't return after: " + CLOSE_TIMEOUT + "ms. Stopping signaling thread");
304+
signalingHandlerThread.quit();
305+
}
306+
}
307+
}
308+
, CLOSE_TIMEOUT);
309+
*/
310+
283311
return jobId;
284312
}
285313

@@ -300,6 +328,9 @@ public void handleMessage(Message inputMessage)
300328
listener.onOpenReply(message.jobId, message.connectivityStatus, message.status, message.text);
301329
}
302330
else if (message.type == SignalingMessage.MessageType.CLOSE_REPLY) {
331+
signalingHandlerThread.quit();
332+
initialized = false;
333+
//closePending = false;
303334
listener.onCloseReply(message.jobId, message.status, message.text);
304335
}
305336
else if (message.type == SignalingMessage.MessageType.RECONFIGURE_REPLY) {

0 commit comments

Comments
 (0)