package com.jqmobile.core.utils.socket.base;
import java.net.ServerSocket;
import java.net.Socket;
import com.jqmobile.core.utils.socket.ISocketCloseListner;
import com.jqmobile.core.utils.socket.ISocketService;
import com.jqmobile.core.utils.thread.AsyncTask;
import com.jqmobile.core.utils.thread.BaseThreadPool;
import com.jqmobile.core.utils.thread.IThreadPool;
/**
* 异步Socket请求服务端处理
* @author modi
*
* @param <Task>
*/
public abstract class AsyncHandlerSocketService<Task> extends Thread implements ISocketService<Task>{
private ISocketCloseListner closeListner;
// protected final IThreadPool pool = new BaseThreadPool(2, 20, 180000);
private int port;
public AsyncHandlerSocketService(int port){
this.port = port;
this.start();
}
@SuppressWarnings("unchecked")
@Override
public void run() {
Throwable e = null;
try{
ServerSocket server = new ServerSocket(port);
while(true){
Socket socket = server.accept();
// socket.getInputStream();
// OutputStream os = socket.getOutputStream();
// os.write(b);
try{
// handleTask(handler(socket));
AsyncTask task = new AsyncTask<Task, Void>() {
@Override
protected Void doInBackground(Task... params)
throws Throwable {
return null;
}
// @Override
// public Void onHandler(Task... params) throws Throwable {
// handleTask(params[0]);
// return null;
// }
//
// @Override
// public void onResult(Void result) throws Throwable {
// }
//
// @Override
// public void onException(Throwable e) {
// handleException(getParams()[0], e);
// }
};
}finally{
if(!socket.isClosed()) socket.close();
}
}
}catch(Throwable e1){
e = e1;
}finally{
if(null != closeListner) closeListner.handler(e);
}
super.run();
}
/**
* 异常处理
* @param task
* @param e
*/
protected abstract void handleException(Task task, Throwable e);
/**
* 异步task处理
* @param task
*/
protected abstract void handleTask(Task task);
/**
* 同步任务,当前线程执行,将传过来的流解析成task
* (non-Javadoc)
* @see com.jqmobile.core.utils.socket.ISocketService#handler(java.net.Socket)
*/
@Override
public abstract Task handler(Socket socket);
@Override
public void setCloseListner(ISocketCloseListner closeListner) {
this.closeListner = closeListner;
}
}