package com.example.android.wifidirect.discovery; import android.os.Handler; import android.util.Log; import java.io.IOException; import java.net.ServerSocket; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * The implementation of a ServerSocket handler. This is used by the wifi p2p * group owner. */ public class GroupOwnerSocketHandler extends Thread { ServerSocket socket = null; private final int THREAD_COUNT = 10; private Handler handler; private static final String TAG = "GroupOwnerSocketHandler"; public GroupOwnerSocketHandler(Handler handler) throws IOException { try { socket = new ServerSocket(4545); this.handler = handler; Log.d("GroupOwnerSocketHandler", "Socket Started"); } catch (IOException e) { e.printStackTrace(); pool.shutdownNow(); throw e; } } /** * A ThreadPool for client sockets. */ private final ThreadPoolExecutor pool = new ThreadPoolExecutor( THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); @Override public void run() { while (true) { try { // A blocking operation. Initiate a ChatManager instance when // there is a new connection pool.execute(new ChatManager(socket.accept(), handler)); Log.d(TAG, "Launching the I/O handler"); } catch (IOException e) { try { if (socket != null && !socket.isClosed()) socket.close(); } catch (IOException ioe) { } e.printStackTrace(); pool.shutdownNow(); break; } } } }