Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Morlunk/Jumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Comminos <andrew@morlunk.com>2015-01-20 01:02:28 +0300
committerAndrew Comminos <andrew@morlunk.com>2015-01-20 01:02:28 +0300
commit032ff2d95a864c5112021807eb2478360f329f85 (patch)
tree23bb895fa9bcff951ad2062abadd4ea02bb7cbc1
parent12fee554e46aba9ff4870cc40d708cfb41259ba1 (diff)
Safer disconnect logic.
-rw-r--r--src/main/java/com/morlunk/jumble/net/JumbleTCP.java70
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();
}