示例#1
0
 public PacketHandler(int id, string name, int length, PacketReceiveHandler handler)
 {
     this.id = id;
     this.name = name;
     this.length = length;
     this.handler = handler;
 }
示例#2
0
 public PacketHandler(int id, string name, int length, PacketReceiveHandler handler)
 {
     m_ID = id;
     m_Name = name;
     m_Length = length;
     m_Handler = handler;
 }
示例#3
0
 public PacketHandler(int id, string name, int length, PacketReceiveHandler handler)
 {
     m_ID      = id;
     m_Name    = name;
     m_Length  = length;
     m_Handler = handler;
 }
示例#4
0
        public void UnregisterExtended <T>(int id, int subId, PacketReceiveHandler <T> onRecieve)
        {
            for (var i = 0; i < _extendedHandlers[id].Length; i++)
            {
                for (var j = 0; j < _extendedHandlers[id][i].Count; j++)
                {
                    var handler = _extendedHandlers[id][i][j] as PacketHandler <T>;

                    if (handler != null)
                    {
                        var receiveHandler = handler.GetHandler();

                        if (receiveHandler != null && receiveHandler.Method.Equals(onRecieve.Method))
                        {
                            _extendedHandlers[id][i].RemoveAt(j);
                            break;
                        }
                    }
                    else
                    {
                        Tracer.Critical("Unable to unregister this onReceive method.");
                    }
                }
            }
        }
示例#5
0
        public void Register <T>(int id, string name, int length, PacketReceiveHandler <T> onReceive) where T : IRecvPacket
        {
            var type  = typeof(T);
            var ctors = type.GetConstructors();

            var valid = false;

            for (var i = 0; i < ctors.Length && !valid; i++)
            {
                var parameters = ctors[i].GetParameters();
                valid = (parameters.Length == 1 && parameters[0].ParameterType == typeof(PacketReader));
            }

            if (!valid)
            {
                throw new NetworkException(string.Format("Unable to register packet type {0} without a public constructor with a {1} parameter", type, typeof(PacketReader)));
            }

            if (id > byte.MaxValue)
            {
                throw new NetworkException(string.Format("Unable to register packet id {0:X2} because it is greater than byte.MaxValue", id));
            }

            var handler = new PacketHandler <T>(id, name, length, onReceive);

            _handlers[id].Add(handler);
        }
示例#6
0
        public void Unregister <T>(int id, PacketReceiveHandler <T> onRecieve)
        {
            for (var i = 0; i < _handlers[id].Count; i++)
            {
                var handler = _handlers[id][i] as PacketHandler <T>;

                if (handler != null)
                {
                    var receiveHandler = handler.GetHandler();

                    if (receiveHandler != null && receiveHandler.Method.Equals(onRecieve.Method))
                    {
                        _handlers[id].RemoveAt(i);
                        break;
                    }
                }
                else
                {
                    Tracer.Critical("Unable to unregister this onReceive method.");
                }
            }
        }
 public void AddHandler(PacketType packetType, PacketReceiveHandler handler)
 {
     packetHandlers.Add(packetType, handler);
 }
示例#8
0
        public void RegisterExtended <T>(int extendedId, int subId, string name, int length, PacketReceiveHandler <T> onReceive) where T : IRecvPacket
        {
            var type  = typeof(T);
            var ctors = type.GetConstructors();

            var valid = false;

            for (var i = 0; i < ctors.Length && !valid; i++)
            {
                var parameters = ctors[i].GetParameters();
                valid = (parameters.Length == 1 && parameters[0].ParameterType == typeof(PacketReader));
            }

            if (!valid)
            {
                throw new NetworkException(string.Format("Unable to register packet type {0} without a public constructor with a {1} parameter", type, typeof(PacketReader)));
            }

            if (extendedId > byte.MaxValue)
            {
                throw new NetworkException(string.Format("Unable to register packet extendedId {0:X2} because it is greater than byte.MaxValue", extendedId));
            }

            if (subId > byte.MaxValue)
            {
                throw new NetworkException(string.Format("Unable to register packet subId {0:X2} because it is greater than byte.MaxValue", subId));
            }

            if (_extendedHandlers[extendedId] == null)
            {
                _extendedHandlers[extendedId] = new List <PacketHandler> [0x100];

                for (var i = 0; i < _extendedHandlers[extendedId].Length; i++)
                {
                    _extendedHandlers[extendedId][i] = new List <PacketHandler>();
                }
            }

            Tracer.Debug("Registering Extended Command: Id: 0x{0:X2} SubCommand: 0x{1:X2} Name: {2} Length: {3}", extendedId, subId, name, length);

            var handler = new PacketHandler <T>(subId, name, length, onReceive);

            _extendedHandlers[extendedId][subId].Add(handler);
        }