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); } } } } }