private void ReceiveCallback(IAsyncResult ar) { var state = (SocketState)ar.AsyncState; var handler = state.Socket; try { var message = SocketHarnessMessage.ProcessMessage(ar); handler.EndReceive(ar); switch (message.MessageType) { case SocketHarnessMessage.MessageType.Command: HandleCommandMessage(message.Message); break; default: throw new ArgumentException("Cannot process client message of type " + message.MessageType); } } catch (Exception ex) { Console.WriteLine("Client sent bad data " + ex); Console.WriteLine("Sending no move command"); HandleCommandMessage(""); } if (handler.Connected) { BeginRecieve(handler); } }
private void HandleRegistration(Socket socket, String name) { var port = 20000 + _players.Count; var player = new SocketServer(name, port); _players.Add(player); SocketHarnessMessage.SendMessage(socket, SocketHarnessMessage.MessageType.RegistrationPort, port.ToString(), Callback); }
private void RegisterCallback(IAsyncResult ar) { var state = (SocketState)ar.AsyncState; var socket = state.Socket; state.ByteBuffer = new byte[10240]; socket.BeginReceive(state.ByteBuffer, 0, state.ByteBuffer.Length, SocketFlags.None, RegistrationMessage, state); SocketHarnessMessage.SendMessage(socket, SocketHarnessMessage.MessageType.RegisterPlayer, _username); }
private void GameSocketMessage(IAsyncResult ar) { try { var state = (SocketState)ar.AsyncState; var socket = state.Socket; var message = SocketHarnessMessage.ProcessMessage(ar); switch (message.MessageType) { case SocketHarnessMessage.MessageType.GameMap: UpdateGameMap(message.Message); break; case SocketHarnessMessage.MessageType.Killed: killed = true; break; case SocketHarnessMessage.MessageType.CommandFailed: CommandFailedMessage(message.Message); break; case SocketHarnessMessage.MessageType.PlayerRegistered: playerKey = message.Message.First(); break; case SocketHarnessMessage.MessageType.GameComplete: Console.Clear(); Console.WriteLine("Game Has ended!"); socket.EndReceive(ar); if (socket.Connected) { socket.Close(); return; } break; default: throw new ArgumentException("Cannot process this message type " + message.MessageType); } state.ByteBuffer = new byte[20480]; socket.EndReceive(ar); socket.BeginReceive(state.ByteBuffer, 0, state.ByteBuffer.Length, SocketFlags.None, GameSocketMessage, state); } catch (Exception ex) { Console.WriteLine(ex); } }
public void SendCommand(String command) { if (_socket != null && _socket.Connected && !killed) { SocketHarnessMessage.SendMessage(_socket, SocketHarnessMessage.MessageType.Command, command); Console.WriteLine("Your command has been sent to the server. Wait for the other players and the map will update"); } if (killed) { Console.WriteLine("You have been killed and can no longer send commands"); } }
public override void PlayerCommandFailed(ICommand command, string reason) { if (_clientSocket.Connected) { try { SocketHarnessMessage.SendMessage(_clientSocket, SocketHarnessMessage.MessageType.CommandFailed, reason); } catch (Exception ex) { Console.WriteLine("Could not send message to client " + Name + " because it disconnected"); Console.WriteLine(ex); } } }
public override void GameEnded(GameMap gameMap) { if (_clientSocket.Connected) { try { SocketHarnessMessage.SendMessage(_clientSocket, SocketHarnessMessage.MessageType.GameComplete, ""); } catch (Exception ex) { Console.WriteLine("Could not send message to client " + Name + " because it disconnected"); Console.WriteLine(ex); } } }
public override void PlayerKilled(GameMap gameMap) { if (_clientSocket.Connected) { try { var renderer = new ConsoleRender(gameMap); SocketHarnessMessage.SendMessage(_clientSocket, SocketHarnessMessage.MessageType.Killed, renderer.RenderTextGameState().ToString()); } catch (Exception ex) { Console.WriteLine("Could not send message to client " + Name + " because it disconnected"); Console.WriteLine(ex); } } }
public override void StartGame(GameMap gameState) { _gameMap = gameState; try { SocketHarnessMessage.SendMessage(_clientSocket, SocketHarnessMessage.MessageType.PlayerRegistered, PlayerEntity.Key.ToString()); } catch (Exception ex) { Console.WriteLine("Could not send message to client " + Name + " because it disconnected"); Console.WriteLine(ex); } NewRoundStarted(_gameMap); }
private void ReceiveCallBack(IAsyncResult ar) { var socketState = (SocketState)ar.AsyncState; var socket = socketState.Socket; var result = SocketHarnessMessage.ProcessMessage(ar); socket.EndReceive(ar); switch (result.MessageType) { case SocketHarnessMessage.MessageType.RegisterPlayer: HandleRegistration(socket, result.Message); break; default: throw new ArgumentException("Only registration messages allowed " + result.MessageType); } }
private void RegistrationMessage(IAsyncResult ar) { var state = (SocketState)ar.AsyncState; var socket = state.Socket; var message = SocketHarnessMessage.ProcessMessage(ar); int port = 0; switch (message.MessageType) { case SocketHarnessMessage.MessageType.RegistrationPort: port = Int32.Parse(message.Message); break; default: throw new ArgumentException("Expected registration port message " + message.MessageType); } socket.EndReceive(ar); if (socket.Connected) { socket.Disconnect(false); socket.Close(); } socket.Close(); var ipHost = Dns.GetHostEntry(_hostname); _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); state.Socket = _socket; state.ByteBuffer = new byte[20480]; _socket.BeginConnect(ipHost.AddressList.Last(x => x.AddressFamily == AddressFamily.InterNetwork), port, GameSocketConnected, state); Console.WriteLine("Congratulations, player registered on server."); Console.WriteLine("Please wait while the others connect and the game is started."); Console.WriteLine("To move, type a,w,s,d and press enter"); Console.WriteLine("To plant a bomb, type z and enter"); Console.WriteLine("You can reduce the bomb timer to 1 using x"); }
public override void NewRoundStarted(GameMap gameState) { var renderer = new ConsoleRender(gameState); if (_clientSocket.Connected) { try { SocketHarnessMessage.SendMessage(_clientSocket, SocketHarnessMessage.MessageType.GameMap, renderer.RenderTextGameState().ToString()); } catch (Exception ex) { Console.WriteLine("Could not send message to client " + Name + " because it disconnected"); Console.WriteLine(ex); } } else { PublishCommand(new DoNothingCommand()); } }