示例#1
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && !isConnected)
        {
            communicationManager.SendMessage(ConnectPlayerMessage.CreateConnectPlayerMessageToSend(playerId));
        }
        else if (Input.GetKeyDown(KeyCode.Escape) && isConnected)
        {
            communicationManager.SendMessage(new DisconnectPlayerMessage(Random.Range(0, int.MaxValue), playerId));
            Clean();
        }

        ReadMessages();

        if (simIniTime != 0)
        {
            if (!Input.GetKey(KeyCode.K))
            {
                Interpolate();
            }
        }

        if (ownPlayer != null)
        {
            communicationManager.SendMessage(new PlayerInputMessage(playerId, ownPlayer.playerInput));
        }

        Packet outPacket = communicationManager.BuildPacket();

        if (outPacket != null)
        {
            channel.Send(outPacket);
        }
    }
示例#2
0
    public void Update()
    {
        if (!_connected && Input.GetKeyDown(KeyCode.Space))
        {
            _communicationManager.SendMessage(ConnectPlayerMessage.CreateConnectPlayerMessageToSend(PlayerId));
            CleanClient();
        }
        else if (_connected && Input.GetKeyDown(KeyCode.Escape))
        {
            var id = Random.Range(0, int.MaxValue);
            _communicationManager.SendMessage(new DisconnectPlayerMessage(id, PlayerId));
        }

        ReadMessages(); // Read messages from server
        Interpolate();  // Perform interpolation of snapshots
        SendInput();    // Send own data
    }
示例#3
0
文件: Client.cs 项目: LucasCasa/TAVJ
    void Update()
    {
        Packet s;

        if ((s = channel.GetPacket()) != null)
        {
            int messages = s.buffer.GetInt();
            for (int i = 0; i < messages; i++)
            {
                Message m = readServerMessage(s.buffer);
                if (m != null)
                {
                    ProcessMessage(m);
                }
                else
                {
                    Debug.Log("m is null");
                }
            }
            Debug.Log("Recibi algo");
        }
        if (!snapshotManager.alreadyAdded)
        {
            snapshotManager.AddInterpolated();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            //send player connect message
            ConnectPlayerMessage connectPlayerMessage = ConnectPlayerMessage.CreateConnectPlayerMessageToSend(playerId);
            cm.SendMessage(connectPlayerMessage);
        }
        processSnapshot();
        Packet             packet = Packet.Obtain();
        PlayerInputMessage pim    = new PlayerInputMessage(playerId, playerController.playerInput);

        cm.SendMessage(pim);

        Packet p = cm.BuildPacket();

        channel.Send(p);
    }
示例#4
0
文件: Client.cs 项目: marcoslund/tavj
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {
            //send player connect message
            outMessages.Add(ConnectPlayerMessage.CreateConnectPlayerMessageToSend(playerId));
        }

        if (Input.GetKeyDown(KeyCode.V))
        {
            //send player disconnect message
            Packet p = new Packet();
            DisconnectPlayerMessage disconnectPlayerMessage = new DisconnectPlayerMessage(GetNewReliableMessageId(), playerId);
            p.buffer.PutInt(1);
            disconnectPlayerMessage.Save(p.buffer);
            p.buffer.Flush();
            channel.Send(p);
        }

        Packet inPacket = channel.GetPacket();

        if (inPacket != null)
        {
            //read it!
            BitBuffer      bitBuffer      = inPacket.buffer;
            int            messageCount   = bitBuffer.GetInt();
            List <Message> serverMessages = new List <Message> ();
            for (int i = 0; i < messageCount; i++)
            {
                //parse message
                Message serverMessage = ReadServerMessage(bitBuffer);
                if (serverMessage != null)
                {
                    serverMessages.Add(serverMessage);
                }
            }
            for (int i = 0; i < serverMessages.Count; i++)
            {
                ProcessServerMessage(serverMessages[i]);
            }
        }

        if (localPlayerController != null)
        {
            PlayerInputMessage playerInputMessage = new PlayerInputMessage(-1, localPlayerController.Input);
            outMessages.Add(playerInputMessage);
            outMessages.Add(AckReliableSendEveryFrameMessage.CreateAckReliableSendEveryFrameMessageMessageToSend(lastReceivedSendInEveryFramePacketMessageId));
        }

        int messagesReadyToSend = 0;

        for (int i = 0; i < outMessages.Count; i++)
        {
            Message clientMessage = outMessages [i];
            clientMessage.Update(Time.deltaTime);
            if (clientMessage.NeedsToBeSent)
            {
                messagesReadyToSend++;
            }
        }

        if (messagesReadyToSend > 0)
        {
            Packet outPacket = new Packet();
            outPacket.buffer.PutInt(outMessages.Count);
            for (int i = 0; i < outMessages.Count; i++)
            {
                Message clientMessage = outMessages [i];
                clientMessage.Save(outPacket.buffer);
                if (clientMessage.Reliability == ReliabilityType.UNRELIABLE)
                {
                    outMessages.RemoveAt(i);
                    i--;
                }
                else if (clientMessage.Reliability == ReliabilityType.RELIABLE_SEND_EVERY_PACKET)
                {
                    clientMessage.TimeToSend = 0;
                }
                else
                {
                    clientMessage.TimeToSend = clientMessage.ReliableMaxTime;
                }
            }

            outPacket.buffer.Flush();
            channel.Send(outPacket);
        }
    }