public virtual void HandlePacket(int code, GamePacket packet) { if (packet == null) { log.Error("Packet is null!"); return; } IServerPacketHandler handler = null; if (m_packagesHandlers.ContainsKey(code)) { handler = m_packagesHandlers[code]; } else { log.ErrorFormat("Receive package's code is not exists! Code: {0}", code); log.Error(Marshal.ToHexDump(string.Format("Code: {0}", code), packet.Buffer, 0, packet.Length)); return; } long timeUsed = Environment.TickCount; try { handler.HandlePacket(m_connector, packet); } catch (Exception ex) { log.ErrorFormat("Error while processing package (handler={0})", handler.GetType().FullName); log.Error("Handle package error!", ex); } timeUsed = Environment.TickCount - timeUsed; log.InfoFormat("Package process time: {0}ms", timeUsed); if (timeUsed > 1000) { log.WarnFormat("Handle package thread {0} {1} took {2}ms!", System.Threading.Thread.CurrentThread.ManagedThreadId, handler, timeUsed); } }
private static void RegisterPacketHandler(int code, IServerPacketHandler iPackageHandler) { m_packagesHandlers[code] = iPackageHandler; }