public JToken JsonCommand(JToken jtoken, string name = "no name", string AIType = "dumb", int n = 1) { JsonValidation.ValidateJTokenPlayer(jtoken); switch (jtoken.ElementAt(0).ToObject <string>()) { case "register": if (AIType == "less dumb") { _player = new PlayerWrapper(name, AIType, n); } else { _player = new PlayerWrapper(name, AIType); } return(JToken.Parse(JsonConvert.SerializeObject(name))); case "receive-stones": _player.ReceiveStones(jtoken.ElementAt(1).ToObject <string>()); return(JToken.Parse(JsonConvert.SerializeObject(null))); case "make-a-move": try { return(JToken.Parse(JsonConvert.SerializeObject(_player.MakeAMove( jtoken.ElementAt(1).ToObject <string[][][]>())))); } catch (PlayerException e) { return(JToken.Parse(JsonConvert.SerializeObject(e.Message))); } } throw new InvalidJsonInputException("Unrecognized JSONCommand passed to PlayerWrapper"); }
private void PlayerRequestReceived(PlayerRequestPacket packet, Connection connection) { //Console.WriteLine($"Request received {packet.Request}"); JArray requestArray = JsonConvert.DeserializeObject <JArray>(packet.Request); PlayerResponsePacket response; switch (requestArray[0].ToObject <string>()) { case "Register": string register = _player.Register( requestArray[1].ToObject <string>(), requestArray[2].ToObject <string>(), requestArray[3].ToObject <int>()); response = new PlayerResponsePacket(JsonConvert.SerializeObject(register), packet); connection.Send(response); return; case "ReceiveStones": _player.ReceiveStones(requestArray[1].ToObject <string>()); return; case "MakeAMove": string move; try { move = _player.MakeAMove(requestArray[1].ToObject <string[][][]>()); } catch (PlayerException e) { move = e.Message; } response = new PlayerResponsePacket(JsonConvert.SerializeObject(move), packet); connection.Send(response); return; case "GetStone": string stone = _player.GetStone(); response = new PlayerResponsePacket(JsonConvert.SerializeObject(stone), packet); connection.Send(response); return; case "GetName": string name = _player.GetStone(); response = new PlayerResponsePacket(JsonConvert.SerializeObject(name), packet); connection.Send(response); return; } throw new PlayerClientException("Invalid operation sent to PlayerClient"); }
public string MakeAMove(string[][][] boards) { try { RuleChecker.CheckHistory(_stone, boards); } catch (RuleCheckerException) { throw new PlayerException("This history makes no sense!"); } switch (_configuration) { case "always return 1-1": return("1-1"); case "return 19-19 once": if (_once == false) { _once = true; return("19-19"); } goto default; case "return 99-99 once": if (_once == false) { _once = true; return("99-99"); } goto default; case "return characters once": if (_once == false) { _once = true; return("illegal move"); } goto default; case "return numbers once": if (_once == false) { _once = true; return("1234"); } goto default; case "return array once": if (_once == false) { _once = true; return("[\"illlegal move\"]"); } goto default; //not illegal, but will let the other player win case "pass forever": return("pass"); case "return empty": if (_once == false) { _once = true; return(""); } goto default; default: return(_player.MakeAMove(boards)); } throw new Exception("Illegal player somehow failed to return a move"); }
public JToken JsonCommand(JToken jtoken, string name = "no name") { JsonValidation.ValidateJTokenPlayer(jtoken); try { switch (jtoken.ElementAt(0).ToObject <string>()) { case "register": try { name = _player.Register(name); return(JToken.Parse(JsonConvert.SerializeObject(name))); } catch (JsonSerializationException e) { throw new InvalidJsonInputException(e.Message); } case "receive-stones": try { _player.ReceiveStones(jtoken.ElementAt(1).ToObject <string>()); } catch (JsonSerializationException e) { throw new InvalidJsonInputException(e.Message); } catch (ArgumentException e) { throw new InvalidJsonInputException(e.Message); } return(JToken.Parse(JsonConvert.SerializeObject(null))); case "make-a-move": try { return(JToken.Parse(JsonConvert.SerializeObject(_player.MakeAMove( jtoken.ElementAt(1).ToObject <string[][][]>())))); } catch (PlayerException e) { return(JToken.Parse(JsonConvert.SerializeObject(e.Message))); } catch (PlayerProxyException e) { return(JToken.Parse(JsonConvert.SerializeObject(e.Message))); } catch (JsonSerializationException e) { throw new InvalidJsonInputException(e.Message); } } } catch (WrapperException e) { throw new InvalidJsonInputException("A wrapper exception occurred", e); } throw new InvalidJsonInputException("Unrecognized JSONCommand passed to PlayerWrapper"); }
private void StartReceiving() { try { while (sender.Connected) { if (_configuration == "disconnect on connect B") { ForceDisconnect(); } byte[] messageReceived = new byte[8192]; byte[] messageSent; int byteRecv = sender.Receive(messageReceived); string message = Encoding.ASCII.GetString(messageReceived, 0, byteRecv); JArray requestArray = JsonConvert.DeserializeObject <JArray>(message); switch (requestArray[0].ToObject <string>()) { case "register": if (_configuration == "disconnect on register") { ForceDisconnect(); } if (_configuration == "send json array on register") { messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(new string[1] { "json array" })); sender.Send(messageSent); break; } //normal functionality: string register = _player.Register(_name); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(register)); sender.Send(messageSent); break; case "receive-stones": if (_configuration == "disconnect on receive stones") { ForceDisconnect(); } _player.ReceiveStones(requestArray[1].ToObject <string>()); break; case "make-a-move": if (_configuration == "disconnect on make a move") { ForceDisconnect(); } if (_configuration == "send json array on make a move") { messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(new string[1] { "json array" })); sender.Send(messageSent); break; } if (_configuration == "send json object on make a move") { JObject json = new JObject(); json.Add("invalid", "json"); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(json)); sender.Send(messageSent); break; } //Normal functionality: string move; try { move = _player.MakeAMove(requestArray[1].ToObject <string[][][]>()); } catch (PlayerException e) //Board history is illegal { move = e.Message; } messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(move)); sender.Send(messageSent); break; case "GetStone": string stone = _player.GetStone(); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(stone)); sender.Send(messageSent); break; case "GetName": string name = _player.GetName(); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(name)); sender.Send(messageSent); break; default: sender.Shutdown(SocketShutdown.Both); sender.Close(); throw new PlayerClientException("Invalid operation sent to PlayerClient"); } } } catch (Exception) { //Console.WriteLine(e.Message, this); sender.Shutdown(SocketShutdown.Both); sender.Close(); //Console.ReadLine(); throw; } // Close Socket using the method Close() sender.Shutdown(SocketShutdown.Both); sender.Close(); }
private void StartReceiving() { try { while (sender.Connected) { // Data buffer byte[] messageReceived = new byte[8192]; byte[] messageSent; // We receive the message using the method Receive(). This // method returns number of bytes received, that we'll use to convert them to string int byteRecv = sender.Receive(messageReceived); string message = Encoding.ASCII.GetString(messageReceived, 0, byteRecv); JArray requestArray = JsonConvert.DeserializeObject <JArray>(message); switch (requestArray[0].ToObject <string>()) { case "register": string register = _player.Register(_name); // Creation of message that we will send to Server messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(register)); sender.Send(messageSent); break; case "receive-stones": _player.ReceiveStones(requestArray[1].ToObject <string>()); break; case "make-a-move": string move; try { move = _player.MakeAMove(requestArray[1].ToObject <string[][][]>()); } catch (PlayerException e) { move = e.Message; } messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(move)); sender.Send(messageSent); break; case "end-game": string end = _player.EndGame(); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(end)); sender.Send(messageSent); break; case "GetStone": string stone = _player.GetStone(); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(stone)); sender.Send(messageSent); break; case "GetName": string name = _player.GetStone(); messageSent = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(name)); sender.Send(messageSent); break; default: //sender.Shutdown(SocketShutdown.Both); sender.Close(); throw new PlayerClientException("Invalid operation sent to PlayerClient"); } } } catch (Exception) { //Console.WriteLine(e.Message, this); //sender.Shutdown(SocketShutdown.Both); sender.Close(); //Console.ReadLine(); throw; } // Close Socket using the method Close() //sender.Shutdown(SocketShutdown.Both); sender.Close(); }