コード例 #1
0
ファイル: ClassChooser.cs プロジェクト: jkalter11/EllApp
        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);
        }
コード例 #2
0
        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);
        }