コード例 #1
0
        private void ReadRoundEndMessage(Peer peer, NetIncomingMessage msg)
        {
            Debug.Assert(m_localPlayer != null);

            SetState(State.RoundEnd);

            ReadReadyFlags(msg);

            if (m_localPlayer.needsRoundResults)
            {
                ReadRoundResults(msg);
                m_localPlayer.needsRoundResults = false;
                StartRoundResultScreen();
            }
        }
コード例 #2
0
        //////////////////////////////////////////////////////////////////////////////
        private void ReadRoundStartMessage(Peer peer, NetIncomingMessage msg)
        {
            SetState(State.RoundStart);

            if (m_localPlayer != null)
            {
                ReadReadyFlags(msg);
            }
            else
            {
                SkipReadyFlags(msg);
            }

            if (m_localPlayer == null || m_localPlayer.needsFieldState)
            {
                ReadFieldState(peer, msg);
            }
        }
コード例 #3
0
        private void ReadFieldState(Peer peer, NetIncomingMessage message)
        {
            game = new Game(MultiplayerMode.Client);

            SetupField(settings.scheme);
            ReadFieldState(message);

            m_localPlayer = null;

            List<Player> players = game.GetPlayers().list;
            for (int i = 0; i < players.Count; ++i)
            {
                if (players[i].input == null)
                {
                    m_localPlayer = players[i];
                    m_localPlayer.SetPlayerInput(InputMapping.CreatePlayerInput(InputType.Keyboard1));
                    m_localPlayer.input.IsActive = true; // TODO: handle console
                    break;
                }
            }

            Debug.Assert(m_localPlayer != null);
            m_localPlayer.connection = peer.RemoteConnection;
            m_localPlayer.IsReady = true;
            m_localPlayer.needsFieldState = false;
        }
コード例 #4
0
        private void ReadPlayingMessage(Peer peer, NetIncomingMessage msg)
        {
            Debug.Assert(game != null);
            Debug.Assert(m_localPlayer != null && m_localPlayer.IsReady);

            SetState(State.Playing);

            ReadPlayingMessage(msg);

            if (!CVars.sv_dumbClient.boolValue)
            {
                ReplayPlayerActions(m_localPlayer);
            }
        }
コード例 #5
0
        private void ReadRoundStartMessage(Peer peer, NetIncomingMessage msg)
        {
            State state = GetState();
            if (state == State.RoundStart)
            {
                Player player = FindPlayer(msg.SenderConnection);
                player.IsReady = msg.ReadBoolean();
                player.needsFieldState = msg.ReadBoolean();

                if (player.IsReady && AllPlayersAreReady())
                {
                    Log.d("Clients are ready to play");
                    SetState(State.Playing);
                }
            }
            else
            {
                Log.d("Ignore 'RoundStart' message");
            }
        }
コード例 #6
0
 protected override void ReadPeerMessage(Peer peer, PeerMessageId id, NetIncomingMessage msg)
 {
     switch (id)
     {
         case PeerMessageId.RoundStart:
             ReadRoundStartMessage(peer, msg);
             break;
         case PeerMessageId.Playing:
             ReadPlayingMessage(peer, msg);
             break;
         case PeerMessageId.RoundEnd:
             ReadRoundEndMessage(peer, msg);
             break;
         default:
             Debug.Fail("Unexpected message id: " + id);
             break;
     }
 }
コード例 #7
0
        private void ReadPlayingMessage(Peer peer, NetIncomingMessage msg)
        {
            Player player = FindPlayer(msg.SenderConnection);
            player.IsReady = true;

            ClientPacket packet = ReadClientPacket(msg);
            player.lastAckPacketId = packet.id;

            PlayerNetworkInput input = player.input as PlayerNetworkInput;
            Debug.Assert(input != null);

            input.SetNetActionBits(packet.actions);
        }
コード例 #8
0
        private void ReadRoundEndMessage(Peer peer, NetIncomingMessage msg)
        {
            State state = GetState();
            if (state == State.RoundEnd)
            {
                Player player = FindPlayer(msg.SenderConnection);

                player.IsReady = msg.ReadBoolean();
                player.needsRoundResults = msg.ReadBoolean();

                if (game.IsGameEnded)
                {
                    // TODO
                }
                else
                {
                    if (player.IsReady && AllPlayersAreReady())
                    {
                        Log.d("Clients are ready for the next round");
                        game.StartNextRound();

                        SetState(State.RoundStart);
                    }
                }
            }
        }
コード例 #9
0
 public virtual void OnPeerMessageReceived(Peer peer, NetIncomingMessage msg)
 {
     PeerMessageId id = (PeerMessageId) msg.ReadByte();
     ReadPeerMessage(peer, id, msg);
 }
コード例 #10
0
        protected override void ReadPeerMessage(Peer peer, PeerMessageId id, NetIncomingMessage msg)
        {
            switch (id)
            {
                case PeerMessageId.RoundStart:
                    ReadRoundStartMessage(peer, msg);
                    break;

                case PeerMessageId.Playing:
                    ReadPlayingMessage(peer, msg);
                    break;

                case PeerMessageId.RoundEnd:
                    ReadRoundEndMessage(peer, msg);
                    break;
            }
        }
コード例 #11
0
 protected virtual void ReadPeerMessage(Peer peer, PeerMessageId id, NetIncomingMessage msg)
 {
 }
コード例 #12
0
 public void OnPeerMessageReceived(Peer peer, NetIncomingMessage msg)
 {
 }
コード例 #13
0
        public void Stop()
        {
            StopLocalServerDiscovery();

            if (networkPeer != null)
            {
                networkPeer.Stop();
                networkPeer = null;

                Log.d("Stopped network peer");
            }
        }
コード例 #14
0
        private void CreateServer(String appIdentifier, int port)
        {
            Debug.Assert(networkPeer == null);
            networkPeer = new Server(appIdentifier, port); ;

            Log.d("Created network server");
        }
コード例 #15
0
        private void CreateClient(String appIdetifier, IPEndPoint remoteEndPoint, int port)
        {
            Debug.Assert(networkPeer == null);
            networkPeer = new Client(appIdetifier, remoteEndPoint);

            Log.d("Created network client");
        }