feat: create window client app
This commit is contained in:
33
Client/Infrastructure/Parsers/Converters/BooleanConverter.cs
Normal file
33
Client/Infrastructure/Parsers/Converters/BooleanConverter.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Client.Infrastructure.Parsers.Converters
|
||||
{
|
||||
public class BooleanConverter : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(bool);
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||
{
|
||||
var value = reader.Value;
|
||||
if (value == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return value?.ToString()?.Trim('0') != "";
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteRawValue(value == null ? null : (string)value);
|
||||
}
|
||||
}
|
||||
}
|
30
Client/Infrastructure/Parsers/Converters/RawConverter.cs
Normal file
30
Client/Infrastructure/Parsers/Converters/RawConverter.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
|
||||
namespace Client.Infrastructure.Parsers.Converters
|
||||
{
|
||||
public class RawConverter : JsonConverter
|
||||
{
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var raw = JRaw.Create(reader);
|
||||
return raw.ToString();
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
writer.WriteRawValue(value == null ? null : (string)value);
|
||||
}
|
||||
}
|
||||
}
|
65
Client/Infrastructure/Parsers/JsonMessageParser.cs
Normal file
65
Client/Infrastructure/Parsers/JsonMessageParser.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using Newtonsoft.Json;
|
||||
using Client.Domain.Enums;
|
||||
|
||||
namespace Client.Infrastructure.Parsers
|
||||
{
|
||||
public class JsonMessageParser : Domain.Parsers.MessageParserInterface
|
||||
{
|
||||
public Domain.DTO.Message Parse(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
var obj = JsonConvert.DeserializeObject<Objects.Message>(message);
|
||||
if (obj == null)
|
||||
{
|
||||
throw new Domain.Exception.ParserException();
|
||||
}
|
||||
return new Domain.DTO.Message(GetType(obj.Type), GetOperation(obj.Operation), obj.Content ?? "");
|
||||
}
|
||||
catch(JsonException)
|
||||
{
|
||||
throw new Domain.Exception.ParserException();
|
||||
}
|
||||
}
|
||||
|
||||
private MessageTypeEnum GetType(string? type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case "hero":
|
||||
return MessageTypeEnum.Hero;
|
||||
case "drop":
|
||||
return MessageTypeEnum.Drop;
|
||||
case "npc":
|
||||
return MessageTypeEnum.NPC;
|
||||
case "player":
|
||||
return MessageTypeEnum.Player;
|
||||
case "skill":
|
||||
return MessageTypeEnum.Skill;
|
||||
case "item":
|
||||
return MessageTypeEnum.Item;
|
||||
case "abnormalEffect":
|
||||
return MessageTypeEnum.AbnormalEffect;
|
||||
case "chat":
|
||||
return MessageTypeEnum.Chat;
|
||||
}
|
||||
|
||||
return MessageTypeEnum.None;
|
||||
}
|
||||
|
||||
private MessageOperationEnum GetOperation(string? type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case "create":
|
||||
return MessageOperationEnum.Create;
|
||||
case "update":
|
||||
return MessageOperationEnum.Update;
|
||||
case "delete":
|
||||
return MessageOperationEnum.Delete;
|
||||
}
|
||||
|
||||
return MessageOperationEnum.None;
|
||||
}
|
||||
}
|
||||
}
|
21
Client/Infrastructure/Parsers/Objects/Message.cs
Normal file
21
Client/Infrastructure/Parsers/Objects/Message.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Client.Infrastructure.Parsers.Converters;
|
||||
|
||||
namespace Client.Infrastructure.Parsers.Objects
|
||||
{
|
||||
internal class Message
|
||||
{
|
||||
[JsonProperty]
|
||||
public string? Type { get; private set; }
|
||||
[JsonProperty]
|
||||
public string? Operation { get; private set; }
|
||||
[JsonProperty]
|
||||
[JsonConverter(typeof(RawConverter))]
|
||||
public string? Content { get; private set; }
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user