예제 #1
0
 public void Add(PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal)
 {
     lock (lckObj)
     {
         Remove(handler);
         var container = new PacketHandlerPriorityContainer(handler, priority);
         containersTable[handler] = container;
         handlersSet.Add(container);
     }
 }
예제 #2
0
        /// <summary>
        ///   Remove a previously registered packet handler.
        /// </summary>
        /// <param name = "headerID">The numeric packet ID  of the handler.</param>
        /// <param name = "priority">The priority of the handler.</param>
        /// <param name = "handlerDelegate">The delegate that points to the handler.</param>
        /// <returns>The current Connection. This allows chaining.</returns>
        public IonTcpConnection RemoveHandler(int headerID, PacketHandlerPriority priority,
                                              PacketHandler handlerDelegate)
        {
            lock (_packetHandlers[headerID, (int) priority])
                _packetHandlers[headerID, (int) priority] -= handlerDelegate;

            lock (_packetHandlers)
                if (headerID < _packetHandlers.GetLength(0))
                    SetHighestHeaderID();
            return this;
        }
예제 #3
0
파일: ModuleBase.cs 프로젝트: nikes/Link
        protected bool Register <TPacket>(PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal) where TPacket : IDataSerializer
        {
            var info = Session.Proto.GetInfo <TPacket>();

            if (info == null)
            {
                return(false);
            }
            Register(info.Id, handler, priority);
            return(true);
        }
예제 #4
0
        /// <summary>
        ///   Registers a packet handler.
        /// </summary>
        /// <param name = "headerID">The numeric packet ID to register this handler on.</param>
        /// <param name = "priority">The priority this handler has.</param>
        /// <param name = "handlerDelegate">The delegate that points to the handler.</param>
        /// <returns>The current Connection. This allows chaining.</returns>
        public IonTcpConnection AddHandler(int headerID, PacketHandlerPriority priority, PacketHandler handlerDelegate)
        {
            lock (_packetHandlers)
            {
                if (headerID >= _packetHandlers.GetLength(0))
                {
                    SetHighestHeaderID(headerID + 1);
                }
            }
            if (_packetHandlers[headerID, (int) priority] != null)
                lock (_packetHandlers[headerID, (int) priority])
                    _packetHandlers[headerID, (int) priority] += handlerDelegate;
            else
                _packetHandlers[headerID, (int) priority] += handlerDelegate;

            return this;
        }
예제 #5
0
파일: ModuleBase.cs 프로젝트: nikes/Link
 protected void Register(uint packetId, PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal)
 {
     Handlers[packetId]   = handler;
     Priorities[packetId] = priority;
 }
예제 #6
0
        /// <summary>
        ///   Remove a previously registered packet handler.
        /// </summary>
        /// <param name = "headerID">The numeric packet ID  of the handler.</param>
        /// <param name = "priority">The priority of the handler.</param>
        /// <param name = "handlerDelegate">The delegate that points to the handler.</param>
        /// <returns>The current Connection. This allows chaining.</returns>
        public IonTcpConnection RemoveHandler(int headerID, PacketHandlerPriority priority,
                                              PacketHandler handlerDelegate)
        {
            lock (_packetHandlers[headerID, (int) priority])
                _packetHandlers[headerID, (int) priority] -= handlerDelegate;

            lock (_packetHandlers)
                if (headerID < _packetHandlers.GetLength(0))
                    SetHighestHeaderID();
            return this;
        }
예제 #7
0
        /// <summary>
        ///   Registers a packet handler.
        /// </summary>
        /// <param name = "headerID">The numeric packet ID to register this handler on.</param>
        /// <param name = "priority">The priority this handler has.</param>
        /// <param name = "handlerDelegate">The delegate that points to the handler.</param>
        /// <returns>The current Connection. This allows chaining.</returns>
        public IonTcpConnection AddHandler(int headerID, PacketHandlerPriority priority, PacketHandler handlerDelegate)
        {
            lock (_packetHandlers)
            {
                if (headerID >= _packetHandlers.GetLength(0))
                {
                    SetHighestHeaderID(headerID + 1);
                }
            }
            if (_packetHandlers[headerID, (int) priority] != null)
                lock (_packetHandlers[headerID, (int) priority])
                    _packetHandlers[headerID, (int) priority] += handlerDelegate;
            else
                _packetHandlers[headerID, (int) priority] += handlerDelegate;

            return this;
        }
예제 #8
0
 public PacketHandlerPriorityContainer(PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal)
 {
     Id       = Interlocked.Increment(ref idCounter);
     Handler  = handler;
     Priority = priority;
 }