예제 #1
0
        public override ToClientCmd <Settings, State, Move> ReadJson(JsonReader reader, Type objectType, ToClientCmd <Settings, State, Move> existingValue, bool hasExistingValue,
                                                                     JsonSerializer serializer)
        {
            var ret = new ToClientCmd <Settings, State, Move>();

            if (reader.TokenType == JsonToken.Null)
            {
                return(null);
            }
            JObject obj = JObject.Load(reader);

            switch (obj["tag"].ToObject <string>())
            {
            case "Error":
                serializer.Converters.Add(new FiatPlayerConverter());
                ret.Error = new ToClientError
                {
                    Player = obj["player"].ToObject <FiatPlayer>(serializer),
                    Error  = (ToClientErrorType)Enum.Parse(typeof(ToClientErrorType), obj["error"]["tag"].ToObject <string>()),
                    Msg    = ((JObject)obj["error"]).ContainsKey("contents")
                            ? obj["error"]["contents"].ToObject <string>()
                            : null
                };
                break;

            case "Msg":
                serializer.Converters.Add(new GameStateConverter <State, Move>());
                ret.Msg = new ToClientMsg <Settings, State, Move>
                {
                    NewSettings  = obj["settings"].ToObject <Settings>(serializer),
                    NewGameState = obj["state"].Type == JTokenType.Null
                            ? null
                            : obj["state"].ToObject <GameState <State, Move> >(serializer),
                    NewHash = new FiatGameHash {
                        Hash = obj["hash"].ToObject <string>(serializer)
                    }
                };
                break;

            default:
                throw new Exception("Not valid FiatPlayer JSON");
            }
            return(ret);
        }
예제 #2
0
 public override void WriteJson(JsonWriter writer, ToClientCmd <Settings, State, Move> value, JsonSerializer serializer)
 {
     throw new NotImplementedException();
 }