2013-03-24 2 views
0

Недавно я столкнулся с библиотекой с открытым исходным кодом для многопоточных серверов 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. 

Так что мой вопрос. Можно ли заменить обработчик команд обработчиком объекта без определения обработчика команд? Если нет, то каков правильный способ реализации обработчика объекта?

ответ

0

Он по-прежнему нуждается в CommandHandler. Но в методе «GotConnected», вы можете добавить следующее:

public void gotConnected(ClientHandler handler) throws SocketTimeoutException, 
     IOException { 
    handler.setDataMode(DataMode.OBJECT, DataType.IN); 
    handler.setDataMode(DataMode.OBJECT, DataType.OUT);  
} 

и остальная часть передачи будет сделано вашим классом ObjectHandler.