예제 #1
0
        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");
        }
예제 #2
0
 public string Register(string name)
 {
     return(_player.Register(name));
 }
예제 #3
0
        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");
        }
예제 #4
0
        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();
        }
예제 #5
0
        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();
        }