/** 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; }