diff options
author | Andrew Comminos <andrew@morlunk.com> | 2015-01-20 01:02:28 +0300 |
---|---|---|
committer | Andrew Comminos <andrew@morlunk.com> | 2015-01-20 01:02:28 +0300 |
commit | 032ff2d95a864c5112021807eb2478360f329f85 (patch) | |
tree | 23bb895fa9bcff951ad2062abadd4ea02bb7cbc1 | |
parent | 12fee554e46aba9ff4870cc40d708cfb41259ba1 (diff) |
Safer disconnect logic.
-rw-r--r-- | src/main/java/com/morlunk/jumble/net/JumbleTCP.java | 70 |
1 files changed, 36 insertions, 34 deletions
diff --git a/src/main/java/com/morlunk/jumble/net/JumbleTCP.java b/src/main/java/com/morlunk/jumble/net/JumbleTCP.java index 71e812f..9bf58a4 100644 --- a/src/main/java/com/morlunk/jumble/net/JumbleTCP.java +++ b/src/main/java/com/morlunk/jumble/net/JumbleTCP.java @@ -148,6 +148,16 @@ public class JumbleTCP extends JumbleNetworkThread { } } + try { + mDataInput.close(); + mDataOutput.close(); + mTCPSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + mRunning = false; + if(mListener != null) { executeOnMainThread(new Runnable() { @Override @@ -156,21 +166,6 @@ public class JumbleTCP extends JumbleNetworkThread { } }); } - - mRunning = false; - } - - private void error(String desc, Exception e) { - if(!mRunning) return; - final JumbleException ce = new JumbleException(desc, e, - JumbleException.JumbleDisconnectReason.CONNECTION_ERROR); - if(mListener != null) executeOnMainThread(new Runnable() { - @Override - public void run() { - mListener.onTCPConnectionFailed(ce); - } - }); - mRunning = false; } /** @@ -223,32 +218,39 @@ public class JumbleTCP extends JumbleNetworkThread { */ public void disconnect() { if (!mRunning) return; - if (!mConnected) { - // If we failed to get a socket open, the disconnect call won't be reached. - executeOnMainThread(new Runnable() { - @Override - public void run() { - if (mListener != null) - mListener.onTCPConnectionDisconnect(); - } - }); - } mConnected = false; mRunning = false; - executeOnSendThread(new Runnable() { + stopThreads(); + + try { + if (mDataOutput != null) mDataOutput.close(); + if (mDataInput != null) mDataInput.close(); + if (mTCPSocket != null) mTCPSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + executeOnMainThread(new Runnable() { @Override public void run() { - try { - if (mDataOutput != null) mDataOutput.close(); - if (mDataInput != null) mDataInput.close(); - if (mTCPSocket != null) mTCPSocket.close(); - Log.i(Constants.TAG, "JumbleTCP: Disconnected"); - } catch (IOException e) { - e.printStackTrace(); - } + if (mListener != null) + mListener.onTCPConnectionDisconnect(); } }); + } + + private void error(String desc, Exception e) { + if(!mRunning) return; + final JumbleException ce = new JumbleException(desc, e, + JumbleException.JumbleDisconnectReason.CONNECTION_ERROR); + if(mListener != null) executeOnMainThread(new Runnable() { + @Override + public void run() { + mListener.onTCPConnectionFailed(ce); + } + }); + mRunning = false; stopThreads(); } |