blob: 483d817e88648c1f226d8ff125ae745c9d8f6388 [file] [log] [blame]
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;
}
}
}
}