コード例 #1
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);
    }
コード例 #2
0
    void ProcessDisconnectPlayer(DisconnectPlayerMessage disconnectPlayerMessage)
    {
        Player player = GetPlayerWithEndPoint(disconnectPlayerMessage.From);

        if (player != null)
        {
            DisconnectPlayer(player);
            for (int i = 0; i < players.Count; i++)
            {
                Player playerToSendTo = players [i];
                PlayerDisconnectedMessage playerDisconnectedMessage = PlayerDisconnectedMessage.CreatePlayerDisconnectedMessageToSend(playerToSendTo, player.Id);
                playerToSendTo.CommunicationManager.SendMessage(playerDisconnectedMessage);
            }
        }
    }
コード例 #3
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);
        }
    }