public static void Main(string[] args) { // Some arguments string name = "Bad BBS"; //args[0]; int port = 6000; //int.Parse(args[1]); // Handler for Ctrl-C presses Console.CancelKeyPress += InterruptHandler; // Create and run the server gamesServer = new TcpGamesServer(name, port); gamesServer.Run(); }
// Main loop of the Game // Packets are sent sent synchronously though public void Run() { // Make sure we have a player bool running = (_player != null); if (running) { // Send a instruction packet Packet introPacket = new Packet("message", "Welcome player, I want you to guess my number.\n" + "It's somewhere between (and including) 1 and 100.\n"); _server.SendPacket(_player, introPacket).GetAwaiter().GetResult(); } else { return; } // Should be [1, 100] int theNumber = _rng.Next(1, 101); Console.WriteLine("Our number is: {0}", theNumber); // Some bools for game state bool correct = false; bool clientConncted = true; bool clientDisconnectedGracefully = false; // Main game loop while (running) { // Poll for input Packet inputPacket = new Packet("input", "Your guess: "); _server.SendPacket(_player, inputPacket).GetAwaiter().GetResult(); // Read their answer Packet answerPacket = null; while (answerPacket == null) { answerPacket = _server.ReceivePacket(_player).GetAwaiter().GetResult(); Thread.Sleep(10); } // Check for graceful disconnect if (answerPacket.Command == "bye") { _server.HandleDisconnectedClient(_player); clientDisconnectedGracefully = true; } // Check input if (answerPacket.Command == "input") { Packet responsePacket = new Packet("message"); int theirGuess; if (int.TryParse(answerPacket.Message, out theirGuess)) { // See if they won if (theirGuess == theNumber) { correct = true; responsePacket.Message = "Correct! You win!\n"; } else if (theirGuess < theNumber) { responsePacket.Message = "Too low.\n"; } else if (theirGuess > theNumber) { responsePacket.Message = "Too high.\n"; } } else { responsePacket.Message = "That wasn't a valid number, try again.\n"; } // Send the message _server.SendPacket(_player, responsePacket).GetAwaiter().GetResult(); } // Take a small nap Thread.Sleep(10); // If they aren't correct, keep them here running &= !correct; // Check for disconnect, may have happend gracefully before if (!_needToDisconnectClient && !clientDisconnectedGracefully) { clientConncted &= !TcpGamesServer.IsDisconnected(_player); } else { clientConncted = false; } running &= clientConncted; } // Thank the player and disconnect them if (clientConncted) { _server.DisconnectClient(_player, "Thanks for playing \"Guess My Number\"!"); } else { Console.WriteLine("Client disconnected from game."); } Console.WriteLine("Ending a \"{0}\" game.", Name); }
// Constructor public GuessMyNumberGame(TcpGamesServer server) { _server = server; _rng = new Random(); }