diff options
author | Andrew Comminos <andrewcomminos@gmail.com> | 2013-08-03 06:42:12 +0400 |
---|---|---|
committer | Andrew Comminos <andrewcomminos@gmail.com> | 2013-08-03 06:42:12 +0400 |
commit | d3815b40c84c3c15979aa243f04532b75a09e1e4 (patch) | |
tree | 5e647972975f443d2f40e5033e26add964d7b471 /src/main/java | |
parent | d7959eaf50e5ee5b17962200fab751f7fca30244 (diff) |
Various fixes to user and channel state handling.
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/morlunk/jumble/JumbleService.java | 4 | ||||
-rw-r--r-- | src/main/java/com/morlunk/jumble/net/JumbleConnection.java | 31 | ||||
-rw-r--r-- | src/main/java/com/morlunk/jumble/net/UserHandler.java | 14 |
3 files changed, 34 insertions, 15 deletions
diff --git a/src/main/java/com/morlunk/jumble/JumbleService.java b/src/main/java/com/morlunk/jumble/JumbleService.java index 76041d6..c04e3a8 100644 --- a/src/main/java/com/morlunk/jumble/JumbleService.java +++ b/src/main/java/com/morlunk/jumble/JumbleService.java @@ -98,7 +98,9 @@ public class JumbleService extends Service implements JumbleConnection.JumbleCon @Override public boolean isConnected() throws RemoteException { - return mConnection.isConnected(); + if(mConnection != null) + return mConnection.isConnected(); + return false; } @Override diff --git a/src/main/java/com/morlunk/jumble/net/JumbleConnection.java b/src/main/java/com/morlunk/jumble/net/JumbleConnection.java index 139225c..d3a055b 100644 --- a/src/main/java/com/morlunk/jumble/net/JumbleConnection.java +++ b/src/main/java/com/morlunk/jumble/net/JumbleConnection.java @@ -330,14 +330,19 @@ public class JumbleConnection { */ public void disconnect() { mConnected = false; - try { - mTCP.disconnect(); - if(mUDP != null) mUDP.disconnect(); - } catch (IOException e) { - e.printStackTrace(); - } - mTCP = null; - mUDP = null; + mNetworkHandler.postAtFrontOfQueue(new Runnable() { + @Override + public void run() { + try { + mTCP.disconnect(); + if(mUDP != null) mUDP.disconnect(); + } catch (IOException e) { + e.printStackTrace(); + } + mTCP = null; + mUDP = null; + } + }); mExecutorService.shutdown(); mPingExecutorService.shutdown(); } @@ -351,6 +356,14 @@ public class JumbleConnection { mPingExecutorService.shutdownNow(); mTCP = null; mUDP = null; + if(mListener != null) { + mMainHandler.post(new Runnable() { + @Override + public void run() { + mListener.onConnectionDisconnected(); + } + }); + } } /** @@ -366,7 +379,7 @@ public class JumbleConnection { } }); } - disconnect(); + forceDisconnect(); } /** diff --git a/src/main/java/com/morlunk/jumble/net/UserHandler.java b/src/main/java/com/morlunk/jumble/net/UserHandler.java index 0f48e82..fe557ca 100644 --- a/src/main/java/com/morlunk/jumble/net/UserHandler.java +++ b/src/main/java/com/morlunk/jumble/net/UserHandler.java @@ -66,6 +66,9 @@ public class UserHandler extends JumbleMessageHandler.Stub { if(msg.hasName()) { user = new User(msg.getSession(), msg.getName()); mUsers.put(msg.getSession(), user); + // Assume in root channel. TODO FIX ME PLEASE OH GOD WHY DOES THIS WORK + Channel root = mService.getChannelHandler().getChannel(0); + root.addUser(user.getSession()); newUser = true; } else @@ -151,9 +154,11 @@ public class UserHandler extends JumbleMessageHandler.Stub { user.setChannelId(msg.getChannelId()); - if(channel.getId() != old.getId()) { + if(old != null) old.removeUser(user.getSession()); - channel.addUser(user.getSession()); + + channel.addUser(user.getSession()); + if(!newUser) { mService.notifyObservers(new JumbleService.ObserverRunnable() { @Override public void run(IJumbleObserver observer) throws RemoteException { @@ -203,10 +208,9 @@ public class UserHandler extends JumbleMessageHandler.Stub { */ if(msg.getSession() != mService.getSession()) { - Channel channel = mService.getChannelHandler().getChannel(msg.getSession()); - channel.removeUser(msg.getSession()); - final User user = mService.getUserHandler().getUser(msg.getSession()); + Channel channel = mService.getChannelHandler().getChannel(user.getChannelId()); + channel.removeUser(user.getSession()); mService.notifyObservers(new JumbleService.ObserverRunnable() { @Override |