Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }