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());
        }
Example #3
0
        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;
            }
        }