public void RemovePacketDataReceiver(IPacketDataReceiver reciever)
 {
     lock (packetReceiver)
     {
         packetReceiver.Remove(reciever);
     }
 }
 public void AddPacketDataReceiver(IPacketDataReceiver receiver)
 {
     if (receiver as RemotePlayerController)
     {
         rpc = (RemotePlayerController)receiver;
     }
     packetReceiver.Add(receiver);
 }
    // Update is called once per frame
    void Update()
    {
        if (receivePacket.Count != 0)
        {
            Packet packet = receivePacket.Dequeue();

            if (packet.TypeCode == Packet.Type.Quit)
            {
                GameManager.instance.NetEscape();
            }
            if (packet.TypeCode == Packet.Type.SYNC_PLAYER_POS && rpc != null)
            {
                rpc.Receive(packet);
            }

            if (packet.TypeCode == Packet.Type.OK || packet.TypeCode == Packet.Type.FAIL)
            {
                byte       code = packet.Body[0];
                IRequester rq   = requesterBuffer[code];
                if (rq != null && rq.IsRequesting)
                {
                    IPacketDataReceiver pdr = (IPacketDataReceiver)rq;
                    pdr.Receive(packet);
                }

                requesterBuffer.Remove(code);
            }
            else
            {
                foreach (IPacketDataReceiver item in packetReceiver)
                {
                    if (item.CheckResponsible(packet))
                    {
                        item.Receive(packet);
                    }
                }
            }
        }
    }