Exemple #1
0
        public void Register <T>(int id, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket
        {
            Type type = typeof(T);

            ConstructorInfo[] ctors = type.GetConstructors();

            bool valid = false;

            for (int i = 0; i < ctors.Length && !valid; i++)
            {
                ParameterInfo[] 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));
            }

            TypedPacketHandler handler = new TypedPacketHandler(id, name, type, length, onReceive);

            m_TypedHandlers[id].Add(handler);
        }
Exemple #2
0
 public void Unregister(int id, TypedPacketReceiveHandler onRecieve)
 {
     for (int i = 0; i < m_TypedHandlers[id].Count; i++)
     {
         TypedPacketHandler handler = m_TypedHandlers[id][i] as TypedPacketHandler;
         if (handler != null && handler.TypeHandler != null)
         {
             if (handler.TypeHandler.Method.Equals(onRecieve.Method))
             {
                 m_TypedHandlers[id].RemoveAt(i);
                 break;
             }
         }
         else
         {
             Tracer.Critical("Unable to unregister this onReceive method.");
         }
     }
 }
Exemple #3
0
 public void Register <T>(int id, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket
 {
     m_RegisteredHandlers.Add(new Tuple <int, TypedPacketReceiveHandler>(id, onReceive));
     World.Engine.Client.Register <T>(id, name, length, onReceive);
 }
Exemple #4
0
 public TypedPacketHandler(int id, string name, Type type, int length, TypedPacketReceiveHandler handler)
     : base(id, name, length, null)
 {
     this.type = type;
     this.handler = handler;
 }
Exemple #5
0
        public void RegisterExtended <T>(int extendedId, int subId, string name, int length, TypedPacketReceiveHandler onReceive) where T : IRecvPacket
        {
            Type type = typeof(T);

            ConstructorInfo[] ctors = type.GetConstructors();

            bool valid = false;

            for (int i = 0; i < ctors.Length && !valid; i++)
            {
                ParameterInfo[] 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 (m_ExtendedTypedHandlers[extendedId] == null)
            {
                m_ExtendedTypedHandlers[extendedId] = new List <PacketHandler> [0x100];

                for (int i = 0; i < m_ExtendedTypedHandlers[extendedId].Length; i++)
                {
                    m_ExtendedTypedHandlers[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);

            TypedPacketHandler handler = new TypedPacketHandler(subId, name, type, length, onReceive);

            m_ExtendedTypedHandlers[extendedId][subId].Add(handler);
        }
Exemple #6
0
 public TypedPacketHandler(int id, string name, Type type, int length, TypedPacketReceiveHandler handler)
     : base(id, name, length, null)
 {
     m_Type    = type;
     m_Handler = handler;
 }