public static List <GenericResponsePacket> Handle(ClientContext aContext, string json, List <Session> sessions, ConcurrentDictionary <string, Connection> OnlineConnections) { List <GenericResponsePacket> ret = new List <GenericResponsePacket>(); logger.Info($"======================================={Environment.NewLine}Received packet: {Environment.NewLine} {json} { Environment.NewLine }======================================="); GenericRequestPacket obj = JsonConvert.DeserializeObject <GenericRequestPacket>(json); Type type; MethodInfo metodo; /*Handlers declaration*/ ChatHandler chatHandler = new ChatHandler(); LoginHandler lh = new LoginHandler(); MessageHandler messageHandler = new MessageHandler(); RegistrationHandler rh = new RegistrationHandler(); switch (obj.Type) { case CommandType.Login: type = lh.GetType(); metodo = type.GetMethod("DoLogin"); ret.AddRange((List <GenericResponsePacket>)metodo.Invoke(lh, new object[] { aContext, sessions, OnlineConnections, obj.LoginPacket })); break; case CommandType.Message: type = messageHandler.GetType(); metodo = type.GetMethod("HandleMessage"); metodo.Invoke(messageHandler, new object[] { aContext, obj, sessions }); break; case CommandType.ChatsRequest: type = chatHandler.GetType(); metodo = type.GetMethod("ChatRequest"); metodo.Invoke(chatHandler, new object[] { sessions, obj }); break; case CommandType.ChatListRequest: type = chatHandler.GetType(); metodo = type.GetMethod("ChatRequestList"); ret.AddRange((List <GenericResponsePacket>)metodo.Invoke(chatHandler, new object[] { sessions, obj })); break; case CommandType.Registration: type = rh.GetType(); metodo = type.GetMethod("RegisterAccount"); ret.AddRange((List <GenericResponsePacket>)metodo.Invoke(rh, new object[] { obj.RegistrationPacket, aContext })); break; } if (ret.Count == 0) { ret.Add(new GenericResponsePacket { Client = aContext, Response = new Response { ErrorMessage = "Nessun metodo da chiamare in base alla richiesta.", ResponseType = ResponseType.Error } }); } return(ret); }
public static List <GenericResponsePacket> Handle(ClientContext aContext, string json, List <Session> sessions, ConcurrentDictionary <string, Connection> OnlineConnections) { List <GenericResponsePacket> ret = new List <GenericResponsePacket>(); logger.Info($"======================================={Environment.NewLine}Received packet: {Environment.NewLine} {json} { Environment.NewLine }======================================="); GenericRequestPacket obj = JsonConvert.DeserializeObject <GenericRequestPacket>(json /*, Program.settings*/); Type type; MethodInfo metodo; /*Handlers declaration*/ ChatHandler chatHandler = new ChatHandler(); LoginHandler lh = new LoginHandler(); MessageHandler messageHandler = new MessageHandler(); RegistrationHandler rh = new RegistrationHandler(); switch (obj.Type) { case CommandType.Login: type = lh.GetType(); metodo = type.GetMethod("DoLogin"); Console.WriteLine("LOGIN REQUEST FROM " + aContext.Socket.RemoteEndPoint); List <GenericSerializableResponsePacket> loginResponses = (List <GenericSerializableResponsePacket>)metodo.Invoke(lh, new object[] { aContext, sessions, OnlineConnections, obj.LoginPacket }); List <GenericResponsePacket> completeLoginResponses = new List <GenericResponsePacket>(); foreach (GenericSerializableResponsePacket loginResponse in loginResponses) { GenericResponsePacket resp = new GenericResponsePacket(); resp.CopyToResponsePacket(aContext, loginResponse); completeLoginResponses.Add(resp); } ret.AddRange(completeLoginResponses); break; case CommandType.Message: type = messageHandler.GetType(); metodo = type.GetMethod("HandleMessage"); metodo.Invoke(messageHandler, new object[] { aContext, obj, sessions }); break; case CommandType.ChatsRequest: type = chatHandler.GetType(); metodo = type.GetMethod("ChatRequest"); metodo.Invoke(chatHandler, new object[] { sessions, obj }); break; case CommandType.ChatListRequest: type = chatHandler.GetType(); metodo = type.GetMethod("ChatRequestList"); ret.AddRange((List <GenericResponsePacket>)metodo.Invoke(chatHandler, new object[] { sessions, obj })); break; case CommandType.Registration: type = rh.GetType(); metodo = type.GetMethod("RegisterAccount"); List <GenericSerializableResponsePacket> registrationResponses = (List <GenericSerializableResponsePacket>)metodo.Invoke(rh, new object[] { obj.RegistrationPacket, aContext }); List <GenericResponsePacket> completeRegistrationResponses = new List <GenericResponsePacket>(); foreach (GenericSerializableResponsePacket registrationResponse in registrationResponses) { GenericResponsePacket resp = new GenericResponsePacket(); resp.CopyToResponsePacket(aContext, registrationResponse); completeRegistrationResponses.Add(resp); } ret.AddRange(completeRegistrationResponses); break; } if (ret.Count == 0) { ret.Add(new GenericResponsePacket { Client = aContext, Response = new Response { ErrorMessage = "Nessun metodo da chiamare in base alla richiesta.", ResponseType = ResponseType.Error } }); } return(ret); }