JsonSerializer
This commit is contained in:
parent
66ffd99ae5
commit
d9b7b09978
@ -7,11 +7,12 @@
|
|||||||
<Authors>Glax</Authors>
|
<Authors>Glax</Authors>
|
||||||
<RepositoryUrl>https://github.com/C9Glax/CShocker</RepositoryUrl>
|
<RepositoryUrl>https://github.com/C9Glax/CShocker</RepositoryUrl>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
<Version>1.1.6</Version>
|
<Version>1.1.7</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
public class DurationRange : RandomIntegerRange
|
public class DurationRange : RandomIntegerRange
|
||||||
{
|
{
|
||||||
public DurationRange(Range range) : base(range, new Range(0, 30000))
|
public DurationRange(short min, short max) : base(min ,max , 0, 30000)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
public class IntensityRange : RandomIntegerRange
|
public class IntensityRange : RandomIntegerRange
|
||||||
{
|
{
|
||||||
public IntensityRange(Range range) : base(range, new Range(0, 100))
|
public IntensityRange(short min, short max) : base(min , max, 0, 100)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,20 +2,21 @@
|
|||||||
|
|
||||||
public abstract class RandomIntegerRange
|
public abstract class RandomIntegerRange
|
||||||
{
|
{
|
||||||
public Range Range { get; init; }
|
public short Min, Max;
|
||||||
internal RandomIntegerRange(Range range, Range limits)
|
internal RandomIntegerRange(short min, short max, short minLimit, short maxLimit)
|
||||||
{
|
{
|
||||||
if (range.Max - range.Min < 0)
|
if (max - min < 0)
|
||||||
throw new ArgumentException("Min has to be less or equal Max");
|
throw new ArgumentException("Min has to be less or equal Max");
|
||||||
if (range.Min < limits.Min || range.Min > limits.Max)
|
if (min < minLimit || min > maxLimit)
|
||||||
throw new ArgumentOutOfRangeException(nameof(limits.Min), "Min has to be withing Range 0-100");
|
throw new ArgumentOutOfRangeException(nameof(min), $"Min has to be withing Range {minLimit}-{maxLimit}");
|
||||||
if (range.Max < limits.Min || range.Max > limits.Max)
|
if (max < minLimit || max > maxLimit)
|
||||||
throw new ArgumentOutOfRangeException(nameof(range.Max), "Max has to be withing Range 0-100");
|
throw new ArgumentOutOfRangeException(nameof(max), $"Max has to be withing Range {minLimit}-{maxLimit}");
|
||||||
this.Range = range;
|
this.Min = min;
|
||||||
|
this.Max = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetRandomRangeValue()
|
public int GetRandomRangeValue()
|
||||||
{
|
{
|
||||||
return Random.Shared.Next(Range.Min, Range.Max);
|
return Random.Shared.Next(this.Min, this.Max);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ using CShocker.Ranges;
|
|||||||
using CShocker.Shockers.Abstract;
|
using CShocker.Shockers.Abstract;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CShocker.Shockers;
|
namespace CShocker.Shockers.APIS;
|
||||||
|
|
||||||
public class OpenShockHttp : HttpShocker
|
public class OpenShockHttp : HttpShocker
|
||||||
{
|
{
|
||||||
@ -41,7 +41,7 @@ public class OpenShockHttp : HttpShocker
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public OpenShockHttp(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, endpoint, apiKey, logger)
|
public OpenShockHttp(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, endpoint, apiKey, ShockerApi.OpenShockHttp, logger)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,11 +2,11 @@
|
|||||||
using CShocker.Shockers.Abstract;
|
using CShocker.Shockers.Abstract;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CShocker.Shockers;
|
namespace CShocker.Shockers.APIS;
|
||||||
|
|
||||||
public class OpenShockSerial : SerialShocker
|
public class OpenShockSerial : SerialShocker
|
||||||
{
|
{
|
||||||
public OpenShockSerial(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, logger)
|
public OpenShockSerial(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, ShockerApi.OpenShockSerial, logger)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
@ -2,11 +2,11 @@
|
|||||||
using CShocker.Shockers.Abstract;
|
using CShocker.Shockers.Abstract;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CShocker.Shockers;
|
namespace CShocker.Shockers.APIS;
|
||||||
|
|
||||||
public class PiShockHttp : HttpShocker
|
public class PiShockHttp : HttpShocker
|
||||||
{
|
{
|
||||||
public PiShockHttp(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, endpoint, apiKey, logger)
|
public PiShockHttp(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, endpoint, apiKey, ShockerApi.PiShockHttp, logger)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
@ -2,11 +2,11 @@
|
|||||||
using CShocker.Shockers.Abstract;
|
using CShocker.Shockers.Abstract;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CShocker.Shockers;
|
namespace CShocker.Shockers.APIS;
|
||||||
|
|
||||||
public class PiShockSerial : SerialShocker
|
public class PiShockSerial : SerialShocker
|
||||||
{
|
{
|
||||||
public PiShockSerial(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, logger)
|
public PiShockSerial(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, ShockerApi.PiShockSerial, logger)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
@ -9,7 +9,7 @@ public abstract class HttpShocker : Shocker
|
|||||||
public string Endpoint { get; init; }
|
public string Endpoint { get; init; }
|
||||||
public string ApiKey { get; init; }
|
public string ApiKey { get; init; }
|
||||||
|
|
||||||
protected HttpShocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, logger)
|
protected HttpShocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, string endpoint, string apiKey, ShockerApi apiType, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, apiType, logger)
|
||||||
{
|
{
|
||||||
Endpoint = endpoint;
|
Endpoint = endpoint;
|
||||||
ApiKey = apiKey;
|
ApiKey = apiKey;
|
||||||
|
@ -5,7 +5,7 @@ namespace CShocker.Shockers.Abstract;
|
|||||||
|
|
||||||
public abstract class SerialShocker : Shocker
|
public abstract class SerialShocker : Shocker
|
||||||
{
|
{
|
||||||
protected SerialShocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, logger)
|
protected SerialShocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ShockerApi apiType, ILogger? logger = null) : base(shockerIds, intensityRange, durationRange, apiType, logger)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using CShocker.Ranges;
|
using System.Reflection.Metadata;
|
||||||
|
using CShocker.Ranges;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CShocker.Shockers.Abstract;
|
namespace CShocker.Shockers.Abstract;
|
||||||
@ -9,6 +10,7 @@ public abstract class Shocker
|
|||||||
public readonly IntensityRange IntensityRange;
|
public readonly IntensityRange IntensityRange;
|
||||||
public readonly DurationRange DurationRange;
|
public readonly DurationRange DurationRange;
|
||||||
protected ILogger? Logger;
|
protected ILogger? Logger;
|
||||||
|
public readonly ShockerApi ApiType;
|
||||||
|
|
||||||
public void Control(ControlAction action, string? shockerId = null, int? intensity = null, int? duration = null)
|
public void Control(ControlAction action, string? shockerId = null, int? intensity = null, int? duration = null)
|
||||||
{
|
{
|
||||||
@ -26,11 +28,12 @@ public abstract class Shocker
|
|||||||
|
|
||||||
protected abstract void ControlInternal(ControlAction action, string shockerId, int intensity, int duration);
|
protected abstract void ControlInternal(ControlAction action, string shockerId, int intensity, int duration);
|
||||||
|
|
||||||
protected Shocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ILogger? logger = null)
|
protected Shocker(List<string> shockerIds, IntensityRange intensityRange, DurationRange durationRange, ShockerApi apiType, ILogger? logger = null)
|
||||||
{
|
{
|
||||||
this.ShockerIds = shockerIds;
|
this.ShockerIds = shockerIds;
|
||||||
this.IntensityRange = intensityRange;
|
this.IntensityRange = intensityRange;
|
||||||
this.DurationRange = durationRange;
|
this.DurationRange = durationRange;
|
||||||
|
this.ApiType = apiType;
|
||||||
this.Logger = logger;
|
this.Logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
CShocker/Shockers/Abstract/ShockerApi.cs
Normal file
9
CShocker/Shockers/Abstract/ShockerApi.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace CShocker.Shockers.Abstract;
|
||||||
|
|
||||||
|
public enum ShockerApi
|
||||||
|
{
|
||||||
|
OpenShockHttp = 0,
|
||||||
|
OpenShockSerial = 1,
|
||||||
|
PiShockHttp = 2,
|
||||||
|
PiShockSerial = 3
|
||||||
|
}
|
49
CShocker/Shockers/ShockerJsonConverter.cs
Normal file
49
CShocker/Shockers/ShockerJsonConverter.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
using CShocker.Ranges;
|
||||||
|
using CShocker.Shockers.Abstract;
|
||||||
|
using CShocker.Shockers.APIS;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace CShocker.Shockers;
|
||||||
|
|
||||||
|
public class ShockerJsonConverter : JsonConverter
|
||||||
|
{
|
||||||
|
public override bool CanConvert(Type objectType)
|
||||||
|
{
|
||||||
|
return (objectType == typeof(Shocker));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
JObject jo = JObject.Load(reader);
|
||||||
|
ShockerApi? apiType = jo.SelectToken("ApiType")?.Value<ShockerApi>();
|
||||||
|
|
||||||
|
switch (apiType)
|
||||||
|
{
|
||||||
|
case ShockerApi.OpenShockHttp:
|
||||||
|
return new OpenShockHttp(
|
||||||
|
jo.SelectToken("ShockerIds")!.Value<List<string>>()!,
|
||||||
|
jo.SelectToken("IntensityRange")!.Value<IntensityRange>()!,
|
||||||
|
jo.SelectToken("DurationRange")!.Value<DurationRange>()!,
|
||||||
|
jo.SelectToken("Endpoint")!.Value<string>()!,
|
||||||
|
jo.SelectToken("ApiKey")!.Value<string>()!
|
||||||
|
);
|
||||||
|
case ShockerApi.OpenShockSerial:
|
||||||
|
case ShockerApi.PiShockHttp:
|
||||||
|
case ShockerApi.PiShockSerial:
|
||||||
|
throw new NotImplementedException();
|
||||||
|
default:
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanWrite => false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Don't call this
|
||||||
|
/// </summary>
|
||||||
|
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||||
|
{
|
||||||
|
throw new Exception("Dont call this");
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user