/** handle actual disconnecting - from ui thread only */ void doDisconnect() { mState = State.kDisconnecting; for (RoomObserver obs : mObservers) { obs.onRoomDisconnected(); } Set<String> keyset = mRemoteStream.keySet(); for (String key : keyset) { StreamDescription stream = (StreamDescription) mRemoteStream.get(key); removeStream(stream); triggerStreamRemoved(stream); } mRemoteStream.clear(); if (mLocalStream.size() > 0) { unpublish(); } synchronized (mSocketLock) { if (mIoClient != null) { mIoClient.disconnect(); mIoClient = null; } } mState = State.kDisconnected; }
/** stop all streams from being cast to the server */ void doUnpublish() { for (String key : mLocalStream.keySet()) { final StreamDescription stream = mLocalStream.get(key); if (stream != null && stream.isLocal()) { stream.pc.removeStream(lMS); for (RoomObserver obs : mObservers) { obs.onStreamRemoved(stream); } if (mObservers.size() == 0) { destroy(stream); } } } mLocalStream.clear(); if (lMS != null) { lMS.dispose(); } if (mVideoCapturer != null) { mVideoCapturer.dispose(); } lMS = null; mVideoCapturer = null; if (mVideoSource != null && !mVideoStopped) { mVideoSource.stop(); } mVideoSource = null; }
/** triggers the event that a stream was removed */ void triggerStreamRemoved(StreamDescription stream) { for (RoomObserver obs : mObservers) { obs.onStreamRemoved(stream); } if (mObservers.size() == 0) { destroy(stream); } }
@Override public void onEvent(JSONArray args, Acknowledge ack) { log("mOnDataStream"); try { JSONObject param = args.getJSONObject(0); String streamId = param.getString("id"); String message = param.getString("msg"); StreamDescriptionInterface stream = mRemoteStream.get(streamId); for (RoomObserver obs : mObservers) { obs.onStreamData(message, stream); } } catch (JSONException e) { } }
/** triggers that a new video token is required - very soon - or the connection will end */ void triggerRequestVideoToken() { for (RoomObserver obs : mObservers) { obs.onRequestRefreshToken(); } }
/** triggers that subscribe was successful, and media is now available to stream */ void triggerMediaAvailable(StreamDescriptionInterface stream) { for (RoomObserver obs : mObservers) { obs.onStreamMediaAvailable(stream); } }
/** triggers the event that publish has been allowed now */ void triggerPublishAllowed() { for (RoomObserver obs : mObservers) { obs.onPublishAllowed(); } }
/** triggers the event that a stream was added - will eventually happen with delay */ void triggerStreamAdded(StreamDescription stream) { for (RoomObserver obs : mObservers) { obs.onStreamAdded(stream); } }