コード例 #1
0
        private void ThreadPoolDelegate(Object state)
        {
            PacketCallbackWrapper wrapper = (PacketCallbackWrapper)state;

            try
            {
                wrapper.Callback(wrapper.Packet, wrapper.Agent);
            }
            catch (Exception ex)
            {
                Logger.Log("Async Packet Event Handler: " + ex.ToString(), Helpers.LogLevel.Error);
            }
        }
コード例 #2
0
        private void ThreadPoolDelegate(Object state)
        {
            PacketCallbackWrapper wrapper = (PacketCallbackWrapper)state;

            try
            {
                wrapper.Callback(this, new PacketReceivedEventArgs(wrapper.Packet, wrapper.Simulator));
            }
            catch (Exception ex)
            {
                Logger.Log("Async Packet Event Handler: " + ex.ToString(), Helpers.LogLevel.Error, Client);
            }
        }
コード例 #3
0
        /// <summary>
        /// Fire the events registered for this packet type asynchronously
        /// </summary>
        /// <param name="incomingPacket">The incoming packet</param>
        internal void BeginRaiseEvent(IncomingPacket incomingPacket)
        {
            PacketCallback callback;

            if (m_eventTable.TryGetValue(incomingPacket.Packet.Type, out callback) && callback != null)
            {
                PacketCallbackWrapper wrapper = new PacketCallbackWrapper {
                    Callback = callback, IncomingPacket = incomingPacket
                };
                m_scheduler.FireAndForget(PacketDelegate, wrapper);
            }
            else
            {
                m_log.Debug("No handler registered for packet " + incomingPacket.Packet.Type);
            }
        }
コード例 #4
0
        private void PacketDelegate(object state)
        {
            PacketCallbackWrapper wrapper        = (PacketCallbackWrapper)state;
            IncomingPacket        incomingPacket = wrapper.IncomingPacket;
            LLAgent agent = wrapper.IncomingPacket.Agent;

            if (!agent.IsConnected)
            {
                m_log.DebugFormat("Dropping incoming {0} packet (#{1}) for dead client {2}",
                                  incomingPacket.Packet.Type, incomingPacket.Packet.Header.ID, agent.ID);
                return;
            }

            try
            {
                wrapper.Callback(incomingPacket.Packet, agent);
            }
            catch (Exception ex)
            {
                m_log.Error("Async Packet Event Handler: " + ex.Message, ex);
            }

            // TODO: Optionally log timing info for this packet
            int now = Util.TickCount();

            int recvTime = incomingPacket.StartedHandling - incomingPacket.Received;

            if (recvTime > 1000)
            {
                m_log.Warn("Spent " + recvTime + "ms receiving " + incomingPacket.Packet.Type +
                           " packet for " + wrapper.IncomingPacket.Agent);
            }

            int processTime = now - incomingPacket.StartedHandling;

            if (processTime > 1000)
            {
                m_log.Warn("Spent " + processTime + "ms processing " + incomingPacket.Packet.Type +
                           " packet for " + incomingPacket.Agent);
            }
        }
コード例 #5
0
ファイル: PacketEventDictionary.cs プロジェクト: thoys/simian
 /// <summary>
 /// Fire the events registered for this packet type asynchronously
 /// </summary>
 /// <param name="incomingPacket">The incoming packet</param>
 internal void BeginRaiseEvent(IncomingPacket incomingPacket)
 {
     PacketCallback callback;
     if (m_eventTable.TryGetValue(incomingPacket.Packet.Type, out callback) && callback != null)
     {
         PacketCallbackWrapper wrapper = new PacketCallbackWrapper { Callback = callback, IncomingPacket = incomingPacket };
         m_scheduler.FireAndForget(PacketDelegate, wrapper);
     }
     else
     {
         m_log.Debug("No handler registered for packet " + incomingPacket.Packet.Type);
     }
 }