He escrito una serie de sistemas de red y tengo una buena idea de cómo funciona la red. Sin embargo, siempre termino teniendo una función de recepción de paquetes que es una declaración de cambio gigante. Esto está empezando a llegar a mí. Prefiero una forma elegante y orientada a objetos para manejar los paquetes recibidos, pero cada vez que trato de encontrar una buena solución siempre termino corto.Redes orientadas a objetos
Por ejemplo, digamos que tiene un servidor de red. Simplemente está esperando respuestas. Un paquete entra y el servidor necesita validar el paquete y luego necesita decidir cómo manejarlo.
Por el momento he estado haciendo esto al activar el ID del paquete en el encabezado y luego tener un enorme grupo de llamadas a funciones que manejan cada tipo de paquete. Con los complicados sistemas de red esto da como resultado una declaración de cambio monolítico y realmente no me gusta manejarlo de esta manera. Una forma que he considerado es utilizar un mapa de clases de controladores. Luego puedo pasar el paquete a la clase relevante y manejar los datos entrantes. El problema que tengo con esto es que necesito alguna forma de "registrar" cada manejador de paquetes con el mapa. Esto significa, generalmente, que necesito crear una copia estática de la clase y luego en el constructor registrarlo con el controlador central de paquetes. Mientras esto funciona, realmente parece una manera poco elegante e incómoda de manejarlo.
Editar: Igualmente sería ideal tener un buen sistema que funcione en ambos sentidos. es decir, una estructura de clases que maneja fácilmente el envío de los mismos tipos de paquetes que los reciben (obviamente a través de diferentes funciones).
¿Alguien puede indicarme una mejor manera de manejar los paquetes entrantes? Enlaces e información útil son muy apreciados!
Disculpas si no he descrito bien mi problema ya que mi incapacidad para describirlo también es la razón por la que nunca he logrado encontrar una solución.
No necesita una copia estática de las clases de controlador. Puede pasar instancias en el constructor. Sin embargo, no hay una gran mejora. :( –
@Martinho: Pero eso significa que en algún lugar tengo que crear una instancia de cada clase posible. Cuando, como en el archivo de implementación de la clase, declaro una versión estática de sí mismo, el constructor recibe automáticamente una llamada. – Goz
¿Has visto http? : //ieeexplore.ieee.org/xpl/freeabs_all.jsp? arnumber = 631153? –