Недавно я столкнулся с библиотекой с открытым исходным кодом для многопоточных серверов Java http://www.quickserver.org/. Первый пример EchoServer, который использует ClientCommandHandler , работал отлично. Однако он работает только со строками. В моем приложении я хотел бы использовать специальный пользовательский объект для обмена сообщениями между сервером и клиентом.java обработчик объекта QuickServer
Я попытался следующие:
package server;
import java.io.IOException;
import org.quickserver.net.AppException;
import org.quickserver.net.server.DataMode;
import org.quickserver.net.server.DataType;
import org.quickserver.net.server.QuickServer;
public class TestServer {
public static void main(String s[]) {
QuickServer server = new QuickServer();
try {
server.setDefaultDataMode(DataMode.OBJECT, DataType.IN);
server.setDefaultDataMode(DataMode.OBJECT, DataType.OUT);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
server.setClientObjectHandler("server.ObjHandler");
server.setPort(4123);
server.setName("EchoServer v 1.0");
try {
server.startServer();
} catch(AppException e){
System.err.println("Error in server : "+e);
}
}
}
... и установить это как обработчик объекта ...
package server;
import java.io.IOException;
import java.net.SocketTimeoutException;
import org.quickserver.net.server.ClientHandler;
import org.quickserver.net.server.ClientObjectHandler;
public class ObjHandler implements ClientObjectHandler {
@Override
public void handleObject(ClientHandler arg0, Object arg1)
throws SocketTimeoutException, IOException {
// TODO Auto-generated method stub
}
}
Так что я пытался сделать с этим просто замените команду обработчик полностью с обработчиком объекта. Я получаю следующую ошибку:
Loading QuickServer v2.0.0 RC1 [PID:2488]... Done
Mar 24, 2013 7:26:07 PM org.quickserver.net.server.QuickServer loadBusinessLogic
SEVERE: ClientCommandHandler AND ClientEventHandler was not set.
Mar 24, 2013 7:26:07 PM org.quickserver.net.server.QuickServer startServer
SEVERE: Exception: org.quickserver.net.AppException: ClientCommandHandler AND
ClientEventHandler was not set.
org.quickserver.net.AppException: ClientCommandHandler AND ClientEventHandler was not set.
at org.quickserver.net.server.QuickServer.loadBusinessLogic(QuickServer.java:3142)
at org.quickserver.net.server.QuickServer.startServer(QuickServer.java:432)
at server.TestServer.main(TestServer.java:24)
Error in server : org.quickserver.net.AppException: Exception :org.quickserver.net.AppException: ClientCommandHandler AND ClientEventHandler was not set.
Так что мой вопрос. Можно ли заменить обработчик команд обработчиком объекта без определения обработчика команд? Если нет, то каков правильный способ реализации обработчика объекта?