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(); } }
////////////////////////////////////////////////////////////////////////////// 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); } }
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; }
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); } }
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"); } }
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; } }
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); }
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); } } } }
public virtual void OnPeerMessageReceived(Peer peer, NetIncomingMessage msg) { PeerMessageId id = (PeerMessageId) msg.ReadByte(); ReadPeerMessage(peer, id, msg); }
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; } }
protected virtual void ReadPeerMessage(Peer peer, PeerMessageId id, NetIncomingMessage msg) { }
public void OnPeerMessageReceived(Peer peer, NetIncomingMessage msg) { }
public void Stop() { StopLocalServerDiscovery(); if (networkPeer != null) { networkPeer.Stop(); networkPeer = null; Log.d("Stopped network peer"); } }
private void CreateServer(String appIdentifier, int port) { Debug.Assert(networkPeer == null); networkPeer = new Server(appIdentifier, port); ; Log.d("Created network server"); }
private void CreateClient(String appIdetifier, IPEndPoint remoteEndPoint, int port) { Debug.Assert(networkPeer == null); networkPeer = new Client(appIdetifier, remoteEndPoint); Log.d("Created network client"); }