♻️ Refactor the websocket system
This commit is contained in:
@@ -114,13 +114,9 @@ public class CloudFile : ModelBase, ICloudFile, IIdentifiedResource
|
|||||||
ContentType = MimeType ?? string.Empty,
|
ContentType = MimeType ?? string.Empty,
|
||||||
UploadedAt = UploadedAt?.ToTimestamp(),
|
UploadedAt = UploadedAt?.ToTimestamp(),
|
||||||
// Convert file metadata
|
// Convert file metadata
|
||||||
FileMeta = ByteString.CopyFromUtf8(
|
FileMeta = GrpcTypeHelper.ConvertObjectToByteString(FileMeta),
|
||||||
System.Text.Json.JsonSerializer.Serialize(FileMeta, GrpcTypeHelper.SerializerOptions)
|
|
||||||
),
|
|
||||||
// Convert user metadata
|
// Convert user metadata
|
||||||
UserMeta = ByteString.CopyFromUtf8(
|
UserMeta = GrpcTypeHelper.ConvertObjectToByteString(UserMeta),
|
||||||
System.Text.Json.JsonSerializer.Serialize(UserMeta, GrpcTypeHelper.SerializerOptions)
|
|
||||||
)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return proto;
|
return proto;
|
||||||
|
@@ -77,7 +77,7 @@ public class WebSocketPacket
|
|||||||
return new Shared.Proto.WebSocketPacket
|
return new Shared.Proto.WebSocketPacket
|
||||||
{
|
{
|
||||||
Type = Type,
|
Type = Type,
|
||||||
Data = GrpcTypeHelper.ConvertClassToValue(Data),
|
Data = GrpcTypeHelper.ConvertObjectToByteString(Data),
|
||||||
ErrorMessage = ErrorMessage
|
ErrorMessage = ErrorMessage
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ public class WebSocketPacket
|
|||||||
return new WebSocketPacket
|
return new WebSocketPacket
|
||||||
{
|
{
|
||||||
Type = packet.Type,
|
Type = packet.Type,
|
||||||
Data = GrpcTypeHelper.ConvertValueToObject(packet.Data),
|
Data = GrpcTypeHelper.ConvertByteStringToObject<object?>(packet.Data),
|
||||||
ErrorMessage = packet.ErrorMessage
|
ErrorMessage = packet.ErrorMessage
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -42,20 +42,8 @@ public class CloudFileReferenceObject : ModelBase, ICloudFile
|
|||||||
{
|
{
|
||||||
Id = proto.Id,
|
Id = proto.Id,
|
||||||
Name = proto.Name,
|
Name = proto.Name,
|
||||||
FileMeta = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(
|
FileMeta = GrpcTypeHelper.ConvertByteStringToObject<Dictionary<string, object?>>(proto.FileMeta) ?? [],
|
||||||
proto.FileMeta.ToStringUtf8(),
|
UserMeta = GrpcTypeHelper.ConvertByteStringToObject<Dictionary<string, object?>>(proto.UserMeta) ?? [],
|
||||||
GrpcTypeHelper.SerializerOptions
|
|
||||||
)?.ToDictionary(
|
|
||||||
kvp => kvp.Key,
|
|
||||||
kvp => kvp.Value.ValueKind == JsonValueKind.Undefined ? null : kvp.Value.Deserialize<object?>(GrpcTypeHelper.SerializerOptions)
|
|
||||||
) ?? new Dictionary<string, object?>(),
|
|
||||||
UserMeta = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(
|
|
||||||
proto.UserMeta.ToStringUtf8(),
|
|
||||||
GrpcTypeHelper.SerializerOptions
|
|
||||||
)?.ToDictionary(
|
|
||||||
kvp => kvp.Key,
|
|
||||||
kvp => kvp.Value.ValueKind == JsonValueKind.Undefined ? null : kvp.Value.Deserialize<object?>(GrpcTypeHelper.SerializerOptions)
|
|
||||||
) ?? new Dictionary<string, object?>(),
|
|
||||||
MimeType = proto.MimeType,
|
MimeType = proto.MimeType,
|
||||||
Hash = proto.Hash,
|
Hash = proto.Hash,
|
||||||
Size = proto.Size,
|
Size = proto.Size,
|
||||||
@@ -81,14 +69,10 @@ public class CloudFileReferenceObject : ModelBase, ICloudFile
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Convert file metadata
|
// Convert file metadata
|
||||||
proto.FileMeta = ByteString.CopyFromUtf8(
|
proto.FileMeta = GrpcTypeHelper.ConvertObjectToByteString(FileMeta);
|
||||||
JsonSerializer.Serialize(FileMeta, GrpcTypeHelper.SerializerOptions)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Convert user metadata
|
// Convert user metadata
|
||||||
proto.UserMeta = ByteString.CopyFromUtf8(
|
proto.UserMeta = GrpcTypeHelper.ConvertObjectToByteString(UserMeta);
|
||||||
JsonSerializer.Serialize(UserMeta, GrpcTypeHelper.SerializerOptions)
|
|
||||||
);
|
|
||||||
|
|
||||||
return proto;
|
return proto;
|
||||||
}
|
}
|
||||||
|
@@ -5,14 +5,14 @@ using System.Text.Json.Serialization.Metadata;
|
|||||||
using Google.Protobuf.Collections;
|
using Google.Protobuf.Collections;
|
||||||
using Google.Protobuf.WellKnownTypes;
|
using Google.Protobuf.WellKnownTypes;
|
||||||
using DysonNetwork.Shared.Data;
|
using DysonNetwork.Shared.Data;
|
||||||
using Newtonsoft.Json;
|
using Google.Protobuf;
|
||||||
using JsonSerializer = System.Text.Json.JsonSerializer;
|
using JsonSerializer = System.Text.Json.JsonSerializer;
|
||||||
|
|
||||||
namespace DysonNetwork.Shared.Proto;
|
namespace DysonNetwork.Shared.Proto;
|
||||||
|
|
||||||
public abstract class GrpcTypeHelper
|
public abstract class GrpcTypeHelper
|
||||||
{
|
{
|
||||||
public static readonly JsonSerializerOptions SerializerOptions = new()
|
public static readonly JsonSerializerOptions? SerializerOptions = new()
|
||||||
{
|
{
|
||||||
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
|
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
|
||||||
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
|
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
|
||||||
@@ -144,4 +144,16 @@ public abstract class GrpcTypeHelper
|
|||||||
_ => Value.ForString(JsonSerializer.Serialize(obj, SerializerOptions))
|
_ => Value.ForString(JsonSerializer.Serialize(obj, SerializerOptions))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ByteString ConvertObjectToByteString(object? obj)
|
||||||
|
{
|
||||||
|
return ByteString.CopyFromUtf8(
|
||||||
|
JsonSerializer.Serialize(obj, SerializerOptions)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T? ConvertByteStringToObject<T>(ByteString bytes)
|
||||||
|
{
|
||||||
|
return JsonSerializer.Deserialize<T>(bytes.ToStringUtf8(), SerializerOptions);
|
||||||
|
}
|
||||||
}
|
}
|
@@ -55,7 +55,7 @@ message SendEmailRequest {
|
|||||||
// Represents a WebSocket packet.
|
// Represents a WebSocket packet.
|
||||||
message WebSocketPacket {
|
message WebSocketPacket {
|
||||||
string type = 1;
|
string type = 1;
|
||||||
google.protobuf.Value data = 2;
|
bytes data = 2;
|
||||||
google.protobuf.StringValue error_message = 3;
|
google.protobuf.StringValue error_message = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -254,7 +254,7 @@ public partial class ChatService(
|
|||||||
Packet = new WebSocketPacket
|
Packet = new WebSocketPacket
|
||||||
{
|
{
|
||||||
Type = type,
|
Type = type,
|
||||||
Data = GrpcTypeHelper.ConvertObjectToValue(metaDict),
|
Data = GrpcTypeHelper.ConvertObjectToByteString(metaDict),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -41,7 +41,7 @@ public class WebSocketHandlerGrpc(PusherService.PusherServiceClient pusher, Chat
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestData = GrpcTypeHelper.ConvertValueToClass<ChatController.MarkMessageReadRequest>(packet.Data);
|
var requestData = GrpcTypeHelper.ConvertByteStringToObject<ChatController.MarkMessageReadRequest>(packet.Data);
|
||||||
if (requestData == null)
|
if (requestData == null)
|
||||||
{
|
{
|
||||||
await SendErrorResponse(request, "Invalid request data");
|
await SendErrorResponse(request, "Invalid request data");
|
||||||
@@ -73,7 +73,7 @@ public class WebSocketHandlerGrpc(PusherService.PusherServiceClient pusher, Chat
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestData = GrpcTypeHelper.ConvertValueToClass<ChatController.ChatRoomWsUniversalRequest>(packet.Data);
|
var requestData = GrpcTypeHelper.ConvertByteStringToObject<ChatController.ChatRoomWsUniversalRequest>(packet.Data);
|
||||||
if (requestData == null)
|
if (requestData == null)
|
||||||
{
|
{
|
||||||
await SendErrorResponse(request, "Invalid request data");
|
await SendErrorResponse(request, "Invalid request data");
|
||||||
@@ -93,7 +93,7 @@ public class WebSocketHandlerGrpc(PusherService.PusherServiceClient pusher, Chat
|
|||||||
var responsePacket = new WebSocketPacket
|
var responsePacket = new WebSocketPacket
|
||||||
{
|
{
|
||||||
Type = "messages.typing",
|
Type = "messages.typing",
|
||||||
Data = GrpcTypeHelper.ConvertObjectToValue(new
|
Data = GrpcTypeHelper.ConvertObjectToByteString(new
|
||||||
{
|
{
|
||||||
room_id = sender.ChatRoomId,
|
room_id = sender.ChatRoomId,
|
||||||
sender_id = sender.Id,
|
sender_id = sender.Id,
|
||||||
|
Reference in New Issue
Block a user