public static List <GenericResponsePacket> RegisterAccount(RegistrationPacket packet, ClientContext uContext) { List <GenericResponsePacket> responsePackets = new List <GenericResponsePacket>(); bool result = AccountMgr.CreateAccount(packet.Username, packet.Psw, packet.Email); GenericResponsePacket grp = new GenericResponsePacket { Client = uContext, Response = new RegistrationResponse { MessageType = MessageType.MSG_TYPE_REGISTRATION_RESPONSE, Result = result }, SenderType = SenderType.Server }; responsePackets.Add(grp); return(responsePackets); }
public static List <GenericResponsePacket> DoLogin(ClientContext aContext, List <Session> sessions, ConcurrentDictionary <string, Connection> onlineConnections, LoginPacket packet) { List <GenericResponsePacket> responsePackets = new List <GenericResponsePacket>(); Console.WriteLine("LOGIN REQUEST FROM " + aContext.Socket.RemoteEndPoint); Account u = AccountMgr.GetAccount(packet.Username.ToUpper(), packet.Psw.ToUpper()); if (!AccountMgr.Validate(u)) { GenericResponsePacket grp = new GenericResponsePacket { Client = aContext, Response = new LoginResponse { MessageType = MessageType.MSG_TYPE_LOGIN_INFO, LoginResult = LoginResult.WrongCredentials }, SenderType = SenderType.Server }; responsePackets.Add(grp); } else { Session s = sessions.First(session => session.ID == aContext.IPAddress); s.user = u; s.context = aContext; GenericResponsePacket grpLogin = new GenericResponsePacket { Client = aContext, Response = new LoginResponse { MessageType = MessageType.MSG_TYPE_LOGIN_INFO, LoginResult = LoginResult.Success, AccountID = s.user.idAccount }, SenderType = SenderType.Server, IDAccountReceiver = s.user.idAccount }; responsePackets.Add(grpLogin); if (packet.WantWelcomeMessage) { //Create the welcome message object //Chat chat = new Chat{ chattype = ChatType.CHAT_TYPE_GLOBAL_CHAT, text = "Benvenuto " + s.user.username }; AccountMgr.SetOnline(s.user); //var welcomeMessage = new MessagePacket(MessageType.MSG_TYPE_CHAT, 0, s.user.idAccount, chat); //s.CreateResponse(welcomeMessage); } /* * GenericResponsePacket grpWwm = new GenericResponsePacket * { * Client = aContext, * Response = new ChatMessage * { * Message = * } * }; */ } return(responsePackets); }
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); }