public void Send(TcpClient client, NetworkMessage message) { NetworkStream stream = client.GetStream(); formatter.Serialize(stream, message); Console.WriteLine("Sent message to client {0}: {1}", client.Client.RemoteEndPoint.ToString(), message.ToString()); }
public void Broadcast(NetworkMessage message) { foreach(TcpClient client in clients) { Send(client, message); } Console.WriteLine("Broadcasted message to all clients: {0}", message.ToString()); }
void Update(object sender, ElapsedEventArgs e) { gameTime.Update(); switch(state) { case GameState.Lobby: lobbyElapsed += gameTime.Elapsed; gameResultsElapsed += gameTime.Elapsed; if(gameResultsElapsed >= gameResultsDuration) { if(!shownGameResults) { List<KeyValuePair<string, int>> ranking = GameResults.ToList(); ranking.Sort((firstPair, nextPair) => { return firstPair.Value.CompareTo(nextPair.Value) * -1; }); if(ranking.Count > 0) { Console.WriteLine("The winner is " + ranking[0].Key + " with a score of " + ranking[0].Value); NetworkMessage message = new NetworkMessage(); message.Type = NetworkMessage.MessageType.ServerGameResults; message.Content = ranking; networkingManager.Broadcast(message); } shownGameResults = true; } } if(lobbyElapsed >= lobbyDuration) { Console.WriteLine("Starting game"); NetworkMessage message = new NetworkMessage(); message.Type = NetworkMessage.MessageType.ServerGameState; message.Content = "Game"; networkingManager.Broadcast(message); state = GameState.Game; gameElapsed = TimeSpan.Zero; } break; case GameState.Game: gameElapsed += gameTime.Elapsed; if(gameElapsed >= gameDuration) { Console.WriteLine("Starting lobby"); GameResults.Clear(); NetworkMessage message = new NetworkMessage(); message.Type = NetworkMessage.MessageType.ServerGameState; message.Content = "Lobby"; networkingManager.Broadcast(message); state = GameState.Lobby; lobbyElapsed = TimeSpan.Zero; gameResultsElapsed = TimeSpan.Zero; shownGameResults = false; } break; } }