From e007d99f025015543340b0e2fa22d212b9b9b57a Mon Sep 17 00:00:00 2001 From: Loporrit <141286461+loporrit@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:11:04 +0000 Subject: [PATCH] Chat message APIs --- MareSynchronosAPI/Data/ChatMessage.cs | 11 +++++++++++ MareSynchronosAPI/Data/SignedChatMessage.cs | 14 ++++++++++++++ MareSynchronosAPI/Dto/Chat/GroupChatMsgDto.cs | 13 +++++++++++++ MareSynchronosAPI/Dto/Chat/UserChatMsgDto.cs | 11 +++++++++++ MareSynchronosAPI/SignalR/IMareHub.cs | 12 +++++++++++- MareSynchronosAPI/SignalR/IMareHubClient.cs | 5 +++++ 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 MareSynchronosAPI/Data/ChatMessage.cs create mode 100644 MareSynchronosAPI/Data/SignedChatMessage.cs create mode 100644 MareSynchronosAPI/Dto/Chat/GroupChatMsgDto.cs create mode 100644 MareSynchronosAPI/Dto/Chat/UserChatMsgDto.cs diff --git a/MareSynchronosAPI/Data/ChatMessage.cs b/MareSynchronosAPI/Data/ChatMessage.cs new file mode 100644 index 0000000..55224a5 --- /dev/null +++ b/MareSynchronosAPI/Data/ChatMessage.cs @@ -0,0 +1,11 @@ +using MessagePack; + +namespace MareSynchronos.API.Data; + +[MessagePackObject(keyAsPropertyName: true)] +public record ChatMessage +{ + public string SenderName { get; set; } = string.Empty; + public uint SenderHomeWorldId { get; set; } = 0; + public byte[] PayloadContent { get; set; } = []; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Data/SignedChatMessage.cs b/MareSynchronosAPI/Data/SignedChatMessage.cs new file mode 100644 index 0000000..edfd8cc --- /dev/null +++ b/MareSynchronosAPI/Data/SignedChatMessage.cs @@ -0,0 +1,14 @@ +using MessagePack; + +namespace MareSynchronos.API.Data; + +[MessagePackObject(keyAsPropertyName: true)] +public record SignedChatMessage(ChatMessage Message, UserData Sender) : ChatMessage(Message) +{ + // Sender and timestamp are set by the server + public UserData Sender { get; set; } = Sender; + public long Timestamp { get; set; } = 0; + // Signature is generated by the server as SHA256(Sender.UID | Timestamp | Destination | Message) + // Where Destination is either the receiver's UID, or the group GID + public string Signature { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Chat/GroupChatMsgDto.cs b/MareSynchronosAPI/Dto/Chat/GroupChatMsgDto.cs new file mode 100644 index 0000000..c946c00 --- /dev/null +++ b/MareSynchronosAPI/Dto/Chat/GroupChatMsgDto.cs @@ -0,0 +1,13 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Dto.Group; +using MareSynchronos.API.Dto.User; +using MessagePack; + +namespace MareSynchronos.API.Dto.Chat; + +[MessagePackObject(keyAsPropertyName: true)] +public record GroupChatMsgDto(GroupDto Group, SignedChatMessage Message) +{ + public GroupDto Group = Group; + public SignedChatMessage Message = Message; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/Chat/UserChatMsgDto.cs b/MareSynchronosAPI/Dto/Chat/UserChatMsgDto.cs new file mode 100644 index 0000000..d82855b --- /dev/null +++ b/MareSynchronosAPI/Dto/Chat/UserChatMsgDto.cs @@ -0,0 +1,11 @@ +using MareSynchronos.API.Data; +using MareSynchronos.API.Dto.User; +using MessagePack; + +namespace MareSynchronos.API.Dto.Chat; + +[MessagePackObject(keyAsPropertyName: true)] +public record UserChatMsgDto(SignedChatMessage Message) +{ + public SignedChatMessage Message = Message; +} \ No newline at end of file diff --git a/MareSynchronosAPI/SignalR/IMareHub.cs b/MareSynchronosAPI/SignalR/IMareHub.cs index 98f1091..d27df07 100644 --- a/MareSynchronosAPI/SignalR/IMareHub.cs +++ b/MareSynchronosAPI/SignalR/IMareHub.cs @@ -1,5 +1,7 @@ -using MareSynchronos.API.Data.Enum; +using MareSynchronos.API.Data; +using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Dto; +using MareSynchronos.API.Dto.Chat; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; @@ -16,6 +18,8 @@ public interface IMareHub Task Client_GroupChangePermissions(GroupPermissionDto groupPermission); + Task Client_GroupChatMsg(GroupChatMsgDto groupChatMsgDto); + Task Client_GroupDelete(GroupDto groupDto); Task Client_GroupPairChangePermissions(GroupPairUserPermissionDto permissionDto); @@ -36,6 +40,8 @@ public interface IMareHub Task Client_UserAddClientPair(UserPairDto dto); + Task Client_UserChatMsg(UserChatMsgDto chatMsgDto); + Task Client_UserReceiveCharacterData(OnlineUserCharaDataDto dataDto); Task Client_UserReceiveUploadStatus(UserDto dto); @@ -64,6 +70,8 @@ public interface IMareHub Task GroupChangePassword(GroupPasswordDto groupPassword); + Task GroupChatSendMsg(GroupDto group, ChatMessage message); + Task GroupClear(GroupDto group); Task GroupCreate(); @@ -91,6 +99,8 @@ public interface IMareHub Task UserAddPair(UserDto user); + Task UserChatSendMsg(UserDto user, ChatMessage message); + Task UserDelete(); Task> UserGetOnlinePairs(); diff --git a/MareSynchronosAPI/SignalR/IMareHubClient.cs b/MareSynchronosAPI/SignalR/IMareHubClient.cs index bd29a9f..90d4cc0 100644 --- a/MareSynchronosAPI/SignalR/IMareHubClient.cs +++ b/MareSynchronosAPI/SignalR/IMareHubClient.cs @@ -1,5 +1,6 @@ using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Dto; +using MareSynchronos.API.Dto.Chat; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; @@ -11,6 +12,8 @@ public interface IMareHubClient : IMareHub void OnGroupChangePermissions(Action act); + void OnGroupChatMsg(Action groupChatMsgDto); + void OnGroupDelete(Action act); void OnGroupPairChangePermissions(Action act); @@ -31,6 +34,8 @@ public interface IMareHubClient : IMareHub void OnUserAddClientPair(Action act); + void OnUserChatMsg(Action chatMsgDto); + void OnUserReceiveCharacterData(Action act); void OnUserReceiveUploadStatus(Action act);