Exemplo n.º 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);
        }
    }
Exemplo n.º 2
0
    public void ProcessConnectPlayer(ConnectPlayerMessage connectPlayerMessage)
    {
        int    playerId = connectPlayerMessage.PlayerId;
        Player player   = GetPlayerWithId(playerId);

        if (player != null)
        {
            DisconnectPlayer(player);
        }

        GameObject playerGO = Instantiate(playerPrefab) as GameObject;

        playerGO.name   = "Player " + playerId;
        player          = playerGO.GetComponent <Player> ();
        player.endPoint = connectPlayerMessage.EndPoint;
        player.Id       = playerId;
        players.Add(player);

        //send all players that a new player has connected
        for (int i = 0; i < players.Count; i++)
        {
            Player playerToSendTo = players [i];
            PlayerConnectedMessage playerConnectedMessage = PlayerConnectedMessage.CreatePlayerConnectedMessageToSend(playerToSendTo, playerId);
            playerToSendTo.CommunicationManager.SendMessage(playerConnectedMessage);
        }
    }
Exemplo n.º 3
0
    Message ReadClientMessage(BitBuffer bitBuffer, IPEndPoint clientEndPoint)
    {
        MessageType messageType   = bitBuffer.GetEnum <MessageType> ((int)MessageType.TOTAL);
        Message     clientMessage = null;

        switch (messageType)
        {
        case MessageType.CONNECT_PLAYER:
            clientMessage = ConnectPlayerMessage.CreateConnectPlayerMessageToReceive(clientEndPoint); break;

        case MessageType.DISCONNECT_PLAYER:
            clientMessage = new DisconnectPlayerMessage(); break;

        case MessageType.PLAYER_INPUT:
            clientMessage = new PlayerInputMessage(); break;

        case MessageType.ACK_RELIABLE_MAX_WAIT_TIME:
            clientMessage = AckReliableMessage.CreateAckReliableMessageToReceive(); break;

        case MessageType.ACK_RELIABLE_SEND_EVERY_PACKET:
            clientMessage = AckReliableSendEveryFrameMessage.CreateAckReliableSEFMToReceive(); break;

        default:
            Debug.LogError("Unknown client message received.");
            return(null);
        }
        clientMessage.From = clientEndPoint;
        clientMessage.Load(bitBuffer);

        return(clientMessage);
    }
Exemplo n.º 4
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
    }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
    public void ProcessConnectPlayer(ConnectPlayerMessage connectPlayerMessage)
    {
        int playerId = connectPlayerMessage.PlayerId;
        ServerPlayerController player = GetPlayerWithId(playerId);

        if (player != null)
        {
            DisconnectPlayer(player);
        }

        GameObject playerGO = Instantiate(playerPrefab) as GameObject;

        playerGO.name   = PLAYER + " " + playerId;
        player          = playerGO.GetComponent <ServerPlayerController>();
        player.endPoint = connectPlayerMessage.EndPoint;
        player.Id       = playerId;
        players.Add(player);

        BroadcastConnection(playerId);
    }
Exemplo n.º 7
0
    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);
        }
    }