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); } }
/// <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; }
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); }
/// <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; }
protected void Register(uint packetId, PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal) { Handlers[packetId] = handler; Priorities[packetId] = priority; }
public PacketHandlerPriorityContainer(PacketEventHandler handler, PacketHandlerPriority priority = PacketHandlerPriority.Normal) { Id = Interlocked.Increment(ref idCounter); Handler = handler; Priority = priority; }