Fabio Arnold 9 years ago
parent
commit
5c5b5428ed

+ 35 - 4
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/WiFiP2pServerTask.java

@@ -9,6 +9,7 @@ import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 
@@ -27,11 +28,32 @@ import java.net.Socket;
  */
 public abstract class WiFiP2pServerTask extends BackgroundTask {
 
-
+static int DEFAULT_TIMEOUT = 15;
     private ServerSocket serverSocket;
 
     private WifiP2pDevice ownDevice;
 
+    public int getTimeoutSeconds() {
+        return timeoutSeconds;
+    }
+
+    /**
+     * Set the time out seconds to
+     * -1 for infinity
+     * 0 for defaut 15 seconds
+     * 1 or more for other seconds
+     * @param timeoutSeconds the seconds to wait for an request before time ist out.
+     */
+    public void setTimeoutSeconds(int timeoutSeconds) {
+        if (timeoutSeconds == 0) {
+            this.timeoutSeconds = DEFAULT_TIMEOUT;
+        } else {
+            this.timeoutSeconds = timeoutSeconds;
+        }
+    }
+
+    private int timeoutSeconds;
+
 
     @Override
     public void interrupt(boolean b){
@@ -40,13 +62,14 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
             try {
                 this.serverSocket.close();
             } catch (IOException e) {
-                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
             }
         }
     }
 
     public WiFiP2pServerTask( WifiP2pDevice ownDevice, BackgroundTaskCompletionListener l){
         super(l);
+        this.timeoutSeconds = DEFAULT_TIMEOUT;
         this.ownDevice = ownDevice;
     }
 
@@ -55,7 +78,10 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
         while (!this.isInterrupted()){
             try {
                 this.serverSocket = new ServerSocket(WiFiP2pClientTask.port());
+                //serverSocket.setReuseAddress(true);
+                //serverSocket.bind(new InetSocketAddress(WiFiP2pClientTask.port()));
                 Log.d("DEBUG_WiFiP2pServerTask", "Server: Socket opened");
+                this.serverSocket.setSoTimeout(this.getTimeoutSeconds() * 1000);
                 Socket client = this.serverSocket.accept();
                 Log.d("DEBUG_WiFiP2pServerTask", "Server: connection done");
 
@@ -67,11 +93,16 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
                 return true;
             } catch (ClassNotFoundException e){
                 e.printStackTrace();
-                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
                 return false;
             } catch (IOException  e) {
+                try {
+                    if (!this.serverSocket.isClosed()) this.serverSocket.close();
+                }catch (IOException ec){
+                    Log.e("DEBUG_WiFiP2pServerTask", "Could not close server socket.");
+                }
                 e.printStackTrace();
-                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", "" + e.getMessage());
                 return false;
             }
         }