Add project files.

This commit is contained in:
2024-08-16 11:24:48 +02:00
parent 6e24754b23
commit 6e4501f373
22 changed files with 682 additions and 0 deletions
@@ -0,0 +1,40 @@
using AspNetCore.Extensions.Attributes;
using System.Core.Extensions;
using System.Text;
using System.Text.Json;
namespace AspNetCore.Extensions.Websockets.Converters;
public class JsonWebSocketMessageConverter<T> : WebSocketMessageConverter<T>
{
private readonly JsonSerializerOptions? jsonSerializerOptions;
[DoNotInject]
public JsonWebSocketMessageConverter()
{
}
public JsonWebSocketMessageConverter(JsonSerializerOptions options)
{
this.jsonSerializerOptions = options.ThrowIfNull();
}
public override T ConvertTo(WebSocketConverterRequest request)
{
if (request.Type != System.Net.WebSockets.WebSocketMessageType.Text)
{
throw new InvalidOperationException($"Unable to deserialize message. Message is not text");
}
var stringData = Encoding.UTF8.GetString(request.Payload!);
var objData = JsonSerializer.Deserialize<T>(stringData, this.jsonSerializerOptions);
return objData ?? throw new InvalidOperationException($"Unable to deserialize message to {typeof(T).Name}");
}
public override WebSocketConverterResponse ConvertFrom(T message)
{
var serialized = JsonSerializer.Serialize(message, this.jsonSerializerOptions);
var data = Encoding.UTF8.GetBytes(serialized);
return new WebSocketConverterResponse { EndOfMessage = true, Type = System.Net.WebSockets.WebSocketMessageType.Text, Payload = data };
}
}