feat: create window client app

This commit is contained in:
k0t9i
2023-01-28 14:54:49 +04:00
parent 1d77bceeff
commit 42d594bbbb
43 changed files with 1142 additions and 98 deletions

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

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

View 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;
}
}
}

View 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; }
}
}