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 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); } }
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"); }