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; } }