private void Start()
 {
     pongHandler = this.gameObject.AddComponent <PongHandle>();
     RegisterHandler(PacketOpcode.SERVER.PONG, pongHandler);
     foreach (AbstractClientPacketHandle handle in handlers)
     {
         if (handle == null)
         {
             continue;
         }
         RegisterHandler(handle.getOpcode(), handle);
     }
 }
        private AbstractClientPacketHandle GetHandler(short packetId)
        {
            if (packetId > registered.Length)
            {
                return(null);
            }

            AbstractClientPacketHandle handler = registered[packetId];

            if (handler != null)
            {
                return(handler);
            }
            return(null);
        }
        public void RegisterHandler(PacketOpcode.SERVER code, AbstractClientPacketHandle handler)
        {
            if (registered[(short)code] != null)
            {
                Debug.Log("handler alread in list.");
                return;
            }

            try
            {
                registered[(short)code] = handler;
            }
            catch (Exception e)
            {
                Debug.LogError("Error registering handler - " + code);
                Debug.LogError(e.Message);
            }
        }
        public void DelegateHandler(PacketInStream packet)
        {
            lock (objectLock)
            {
                short head = packet.readShort();
                AbstractClientPacketHandle handler = GetHandler(head);

                if (!handler.IsActive())
                {
                    return;
                }

                if (handler.IsNeedDebug())
                {
                    packet.printHex("Client");
                }
                handler.DelegatePacket(packet);
            }
        }