Consulta de diseño sobre la definición de nuevos eventos además de un conjunto existente de eventos para un protocolo de socket
Pregunta
Escribí un servidor Java y un programa de cliente usando JBoss Netty. Para enviar algunos datos al cliente remoto y recibir datos de ellos, he definido eventos y manejadores para cada evento. En el cable, cada evento es solo un encabezado de byte (Opcode) seguido de los bytes del mensaje. Inicialmente, solo había admitido TCP y había definido eventos como Log_in, Log_out, Data_in, Data_out, etc. en mi programa. Por ejemplo
public static final int LOG_IN = 0x08;
public static final int LOG_OUT = 0x0a;
Luego decidí admitir UDP también y terminé teniendo eventos como login_udp, login_tcp, data_out_tcp o data_out_udp, etc. para que, según el evento generado, el controlador de eventos correcto obtenga el evento y lo escriba en el socket y el puerto remoto apropiados.
Como puede ver, el primer problema que enfrento es que casi he duplicado la cantidad de eventos definidos y controladores de eventos para agregar UDP. ¿Hay una mejor manera de abordar este escenario?
El segundo problema (menor) que me enfrento es que los eventos como Data_out tienen sentido cuando escribe de servidor a cliente, pero cuando recibe el mismo evento en el lado del cliente "data_out" no tiene ese sentido, ya que en realidad son datos entrantes para el cliente. Por el momento, tengo un decodificador que traducirá data_out a data_in. ¿Es este el mejor enfoque?
Solución
Puede usar el patrón de fábrica para crear conexión sobre la base del tipo de canal tipo, es decir, TCP o UDP. Otros detalles tendrás que definir una vez en este caso
En su lugar, llame a Data_out, puede llamarlo como servidor_Out de la misma manera server_in