Exemple #1
0
        private static void DefineMessageHandlers()
        {
            fragmentHandlers = new Dictionary <GameMessageOpcode, MessageHandlerInfo>();
            foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
            {
                foreach (var methodInfo in type.GetMethods())
                {
                    foreach (var fragmentHandlerAttribute in methodInfo.GetCustomAttributes <GameMessageAttribute>())
                    {
                        var fragmentHandler = new MessageHandlerInfo()
                        {
                            Handler   = (FragmentHandler)Delegate.CreateDelegate(typeof(FragmentHandler), methodInfo),
                            Attribute = fragmentHandlerAttribute
                        };

                        fragmentHandlers[fragmentHandlerAttribute.Opcode] = fragmentHandler;
                    }
                }
            }
        }
Exemple #2
0
        private void HandlePacket(ClientStsPacket packet)
        {
            IReadable message = MessageManager.Instance.GetMessage(packet.Uri);

            if (message == null)
            {
                log.Info($"Received unknown packet {packet.Uri}");
                return;
            }

            MessageHandlerInfo handlerInfo = MessageManager.Instance.GetMessageHandler(packet.Uri);

            if (handlerInfo == null)
            {
                log.Info($"Received unhandled packet {packet.Uri}");
                return;
            }

            /*if (State != handlerInfo.State)
             * {
             *  log.Info($"Received packet with invalid session state {packet.Uri}");
             *  return;
             * }*/

            if (packet.Headers.TryGetValue("s", out string sequenceString))
            {
                uint.TryParse(sequenceString, out sequence);
            }

            log.Trace($"Received packet {packet.Uri}.");

            if (packet.Body != "")
            {
                var doc = new XmlDocument();
                doc.LoadXml(packet.Body);
                message.Read(doc);
            }

            handlerInfo.Delegate.Invoke(this, message);
        }