From 9ad1d898ff9ef69ab03c02e7e098d6f81168f914 Mon Sep 17 00:00:00 2001 From: RuKira Date: Thu, 9 Apr 2026 10:51:04 -0400 Subject: [PATCH 1/2] Starting work on Shared Files --- Relay.sln | 14 +++++ RelayClient/MainPage.xaml.cs | 1 + RelayClient/RelayClient.csproj | 4 ++ RelayServer/RelayServer.csproj | 4 ++ RelayShared/.gitignore | 93 ++++++++++++++++++++++++++++++++ RelayShared/Class1.cs | 9 ++++ RelayShared/RelayShared.csproj | 13 +++++ RelayShared/Rtc/RtcModels.cs | 97 ++++++++++++++++++++++++++++++++++ RelayShared/Rtc/RtcServices.cs | 6 +++ 9 files changed, 241 insertions(+) create mode 100644 RelayShared/.gitignore create mode 100644 RelayShared/Class1.cs create mode 100644 RelayShared/RelayShared.csproj create mode 100644 RelayShared/Rtc/RtcModels.cs create mode 100644 RelayShared/Rtc/RtcServices.cs diff --git a/Relay.sln b/Relay.sln index add378e..7bb09e0 100644 --- a/Relay.sln +++ b/Relay.sln @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelayClient", "RelayClient\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelayServer", "RelayServer\RelayServer.csproj", "{38995780-E9AA-44D6-B62D-07CCA45E4E4C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelayShared", "RelayShared\RelayShared.csproj", "{60B17B0B-9910-426A-9B48-AD9377AC89F7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -55,6 +57,18 @@ Global {38995780-E9AA-44D6-B62D-07CCA45E4E4C}.Release|x64.Build.0 = Release|Any CPU {38995780-E9AA-44D6-B62D-07CCA45E4E4C}.Release|x86.ActiveCfg = Release|Any CPU {38995780-E9AA-44D6-B62D-07CCA45E4E4C}.Release|x86.Build.0 = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|x64.Build.0 = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|x86.ActiveCfg = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Debug|x86.Build.0 = Debug|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|Any CPU.Build.0 = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|x64.ActiveCfg = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|x64.Build.0 = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|x86.ActiveCfg = Release|Any CPU + {60B17B0B-9910-426A-9B48-AD9377AC89F7}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RelayClient/MainPage.xaml.cs b/RelayClient/MainPage.xaml.cs index 546f9e6..c055013 100644 --- a/RelayClient/MainPage.xaml.cs +++ b/RelayClient/MainPage.xaml.cs @@ -4,6 +4,7 @@ using WebSocketSharp; using System.Text.Json; using System.Text.Json.Serialization; using System.Text.Json.Serialization.Metadata; +using RelayShared.Rtc; namespace RelayClient; diff --git a/RelayClient/RelayClient.csproj b/RelayClient/RelayClient.csproj index a78e60f..55adb8d 100644 --- a/RelayClient/RelayClient.csproj +++ b/RelayClient/RelayClient.csproj @@ -50,4 +50,8 @@ + + + + diff --git a/RelayServer/RelayServer.csproj b/RelayServer/RelayServer.csproj index 1a2c504..88a35cc 100644 --- a/RelayServer/RelayServer.csproj +++ b/RelayServer/RelayServer.csproj @@ -13,4 +13,8 @@ + + + + diff --git a/RelayShared/.gitignore b/RelayShared/.gitignore new file mode 100644 index 0000000..b59e83d --- /dev/null +++ b/RelayShared/.gitignore @@ -0,0 +1,93 @@ +############################################ +# .NET Build +############################################ + +bin/ +obj/ +out/ +publish/ + +############################################ +# Visual Studio +############################################ + +.vs/ +*.user +*.suo +*.userprefs +*.csproj.user +*.dbmdl +*.cache +*.pdb +*.opendb + +############################################ +# Rider / JetBrains +############################################ + +.idea/ +*.sln.iml + +############################################ +# VSCode +############################################ + +.vscode/ + +############################################ +# NuGet +############################################ + +*.nupkg +*.snupkg +packages/ +.nuget/ +.nuget/packages/ + +############################################ +# Logs +############################################ + +*.log +logs/ + +############################################ +# OS files +############################################ + +.DS_Store +Thumbs.db + +############################################ +# Local secrets / environment +############################################ + +.env +.env.* +secrets.json +appsettings.Development.json + +############################################ +# E2EE private keys +############################################ + +keys/* +!keys/.gitkeep + +############################################ +# Local test databases / data folders +############################################ + +data/ +*.db +*.sqlite +*.sqlite3 + +############################################ +# Temporary files +############################################ + +*.tmp +*.temp +*.bak +*.swp \ No newline at end of file diff --git a/RelayShared/Class1.cs b/RelayShared/Class1.cs new file mode 100644 index 0000000..f4aec5f --- /dev/null +++ b/RelayShared/Class1.cs @@ -0,0 +1,9 @@ +namespace RelayShared; + +public class Class1 +{ + public Class1() + { + return; + } +} \ No newline at end of file diff --git a/RelayShared/RelayShared.csproj b/RelayShared/RelayShared.csproj new file mode 100644 index 0000000..eaddaa9 --- /dev/null +++ b/RelayShared/RelayShared.csproj @@ -0,0 +1,13 @@ + + + + net9.0 + enable + enable + + + + + + + diff --git a/RelayShared/Rtc/RtcModels.cs b/RelayShared/Rtc/RtcModels.cs new file mode 100644 index 0000000..a9a5d36 --- /dev/null +++ b/RelayShared/Rtc/RtcModels.cs @@ -0,0 +1,97 @@ +using SurrealDb.Net.Models; + +namespace RelayShared.Rtc; + +public class RtcSignalTypes +{ + public const string Offer = "rtc_offer"; + public const string Answer = "rtc_answer"; + public const string Candidate = "rtc_candidate"; + public const string OfferUpdated = "rtc_offer_updated"; + public const string AnswerUpdated = "rtc_answer_updated"; +} + +public class RtcJoinRequest +{ + public required string ChannelId { get; set; } + public required string Username { get; set; } +} + +public sealed class RtcSessionDescription +{ + public required string Type { get; set; } + public required string Sdp { get; set; } +} + +public class RtcOffer : Record +{ + public required string ChannelId { get; set; } + public required string Username { get; set; } + public required RtcSessionDescription SessionDescription { get; set; } + // public required string Type { get; set; } + // public required string Sdp { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } +} + +public class RtcLeaveRequest +{ + public required string ChannelId { get; set; } + public required string Username { get; set; } +} + +public class RtcJoinResponse +{ + public required string ChannelId { get; set; } + public bool HasActiveCall { get; set; } + public bool IsOfferer { get; set; } + public string? OfferUser { get; set; } + public string? OfferSdp { get; set; } +} + +public class RtcIceCandidate : Record +{ + public required string ChannelId { get; set; } + public required string Username { get; set; } + public required string Candidate { get; set; } + public string? SdpMid { get; set; } + public int? SdpMLineIndex { get; set; } + // public required string Direction { get; set; } // "offer" or "answer" + public DateTime CreatedAt { get; set; } +} + +public class DBIceCandidate +{ + public required string ChannelId { get; set; } + public required string Username { get; set; } + public required IceCandidate Candidate { get; set; } +} + +public class IceCandidate +{ + public required string candidate { get; set; } + public required string sdpMid { get; set; } + public required int sdpMLineIndex { get; set; } + public required string usernameFragment { get; set; } + +} + +public class RtcAnswer : Record +{ + public required string ChannelId { get; set; } + public required string OfferUser { get; set; } + public required string AnswerUser { get; set; } + public required string Sdp { get; set; } + public DateTime CreatedAt { get; set; } +} + +public sealed class RtcActiveCall : Record +{ + public required string ChannelId { get; set; } + public string? OfferUser { get; set; } + public RtcSessionDescription? Offer { get; set; } + public RtcSessionDescription? Answer { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } + public bool IsActive { get; set; } +} \ No newline at end of file diff --git a/RelayShared/Rtc/RtcServices.cs b/RelayShared/Rtc/RtcServices.cs new file mode 100644 index 0000000..1a8f3ec --- /dev/null +++ b/RelayShared/Rtc/RtcServices.cs @@ -0,0 +1,6 @@ +namespace RelayShared.Rtc; + +public class RtcServices +{ + +} \ No newline at end of file From c3b8dc5061fb35786b30de41341a4985bd1b0b06 Mon Sep 17 00:00:00 2001 From: RuKira Date: Fri, 10 Apr 2026 14:14:35 -0400 Subject: [PATCH 2/2] Shared System completed. Test for bugs. --- RelayClient/MainPage.xaml.cs | 1 - RelayClient/Models/ChannelItem.cs | 8 -- RelayClient/Models/RtcNotificationMessage.cs | 9 -- RelayClient/Models/RtcSignalMessage.cs | 13 -- RelayClient/Models/ServerPublicKeyMessage.cs | 7 - RelayClient/Models/SocketChannelList.cs | 7 - RelayClient/Models/SocketEncryptedMessage.cs | 13 -- RelayClient/Models/SocketRtcSignalMessage.cs | 13 -- RelayClient/RelayClient.csproj | 4 + RelayClient/Resources/Raw/wwwroot/index.js | 1 + RelayServer/Endpoints/RtcEndpoints.cs | 2 +- RelayServer/Models/Chat/SocketChannelList.cs | 7 - .../Models/Chat/SocketEncryptedMessage.cs | 13 -- RelayServer/Models/Crypto/RtcSignalMessage.cs | 13 -- .../Models/Crypto/ServerPublicKeyMessage.cs | 7 - .../Models/Crypto/SocketRtcSignalMessage.cs | 13 -- RelayServer/Models/Rtc/RtcActiveCall.cs | 14 -- RelayServer/Models/Rtc/RtcAnswer.cs | 12 -- RelayServer/Models/Rtc/RtcIceCandidate.cs | 30 ---- RelayServer/Models/Rtc/RtcJoinRequest.cs | 7 - RelayServer/Models/Rtc/RtcJoinResponse.cs | 10 -- RelayServer/Models/Rtc/RtcLeaveRequest.cs | 7 - .../Models/Rtc/RtcNotificationMessage.cs | 17 --- RelayServer/Models/Rtc/RtcOffer.cs | 14 -- .../Models/Rtc/RtcSessionDescription.cs | 7 - RelayServer/Program.cs | 1 + RelayServer/RelayServer.csproj | 4 + .../Services/Chat/ChatSocketBehavior.cs | 3 +- RelayServer/Services/Rtc/RtcCallService.cs | 2 +- .../Services/Rtc/RtcNotificationService.cs | 2 +- RelayShared/Rtc/RtcModels.cs | 130 +++++++++++++----- 31 files changed, 109 insertions(+), 282 deletions(-) delete mode 100644 RelayClient/Models/ChannelItem.cs delete mode 100644 RelayClient/Models/RtcNotificationMessage.cs delete mode 100644 RelayClient/Models/RtcSignalMessage.cs delete mode 100644 RelayClient/Models/ServerPublicKeyMessage.cs delete mode 100644 RelayClient/Models/SocketChannelList.cs delete mode 100644 RelayClient/Models/SocketEncryptedMessage.cs delete mode 100644 RelayClient/Models/SocketRtcSignalMessage.cs delete mode 100644 RelayServer/Models/Chat/SocketChannelList.cs delete mode 100644 RelayServer/Models/Chat/SocketEncryptedMessage.cs delete mode 100644 RelayServer/Models/Crypto/RtcSignalMessage.cs delete mode 100644 RelayServer/Models/Crypto/ServerPublicKeyMessage.cs delete mode 100644 RelayServer/Models/Crypto/SocketRtcSignalMessage.cs delete mode 100644 RelayServer/Models/Rtc/RtcActiveCall.cs delete mode 100644 RelayServer/Models/Rtc/RtcAnswer.cs delete mode 100644 RelayServer/Models/Rtc/RtcIceCandidate.cs delete mode 100644 RelayServer/Models/Rtc/RtcJoinRequest.cs delete mode 100644 RelayServer/Models/Rtc/RtcJoinResponse.cs delete mode 100644 RelayServer/Models/Rtc/RtcLeaveRequest.cs delete mode 100644 RelayServer/Models/Rtc/RtcNotificationMessage.cs delete mode 100644 RelayServer/Models/Rtc/RtcOffer.cs delete mode 100644 RelayServer/Models/Rtc/RtcSessionDescription.cs diff --git a/RelayClient/MainPage.xaml.cs b/RelayClient/MainPage.xaml.cs index 1e43eef..78bf794 100644 --- a/RelayClient/MainPage.xaml.cs +++ b/RelayClient/MainPage.xaml.cs @@ -1,5 +1,4 @@ using RelayClient.Crypto; -using RelayClient.Models; using WebSocketSharp; using System.Text.Json; using System.Text.Json.Serialization; diff --git a/RelayClient/Models/ChannelItem.cs b/RelayClient/Models/ChannelItem.cs deleted file mode 100644 index be3ddac..0000000 --- a/RelayClient/Models/ChannelItem.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace RelayClient.Models; - -public class ChannelItem -{ - public required string ChannelId { get; set; } - public required string Name { get; set; } - public required DateTime CreatedAt { get; set; } -} \ No newline at end of file diff --git a/RelayClient/Models/RtcNotificationMessage.cs b/RelayClient/Models/RtcNotificationMessage.cs deleted file mode 100644 index 4113254..0000000 --- a/RelayClient/Models/RtcNotificationMessage.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace RelayClient.Models; - -public sealed class RtcNotificationMessage -{ - public string? Type { get; set; } - public string? ChannelId { get; set; } - public string? Username { get; set; } - public string? Direction { get; set; } -} diff --git a/RelayClient/Models/RtcSignalMessage.cs b/RelayClient/Models/RtcSignalMessage.cs deleted file mode 100644 index d33732b..0000000 --- a/RelayClient/Models/RtcSignalMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayClient.Models; - -public class RtcSignalMessage -{ - public required string Type { get; set; } // rtc_join / rtc_offer / rtc_answer / rtc_ice_candidate / rtc_leave - public required string From { get; set; } - public required string ChannelId { get; set; } - - public string? Sdp { get; set; } - public string? Candidate { get; set; } - public string? SdpMid { get; set; } - public int? SdpMLineIndex { get; set; } -} \ No newline at end of file diff --git a/RelayClient/Models/ServerPublicKeyMessage.cs b/RelayClient/Models/ServerPublicKeyMessage.cs deleted file mode 100644 index d59b7c9..0000000 --- a/RelayClient/Models/ServerPublicKeyMessage.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayClient.Models; - -public class ServerPublicKeyMessage -{ - public required string Type { get; set; } - public required string PublicKey { get; set; } -} \ No newline at end of file diff --git a/RelayClient/Models/SocketChannelList.cs b/RelayClient/Models/SocketChannelList.cs deleted file mode 100644 index f9d149d..0000000 --- a/RelayClient/Models/SocketChannelList.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayClient.Models; - -public class SocketChannelList -{ - public required string Type { get; set; } - public required List Channels { get; set; } -} \ No newline at end of file diff --git a/RelayClient/Models/SocketEncryptedMessage.cs b/RelayClient/Models/SocketEncryptedMessage.cs deleted file mode 100644 index 1e158c2..0000000 --- a/RelayClient/Models/SocketEncryptedMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayClient.Models; - -public class SocketEncryptedMessage -{ - public required string Type { get; set; } - public required string SenderUsername { get; set; } - public string? RecipientUsername { get; set; } - public required string ChannelId { get; set; } - public required string CipherText { get; set; } - public required string Nonce { get; set; } - public required string Tag { get; set; } - public required string EncryptedKey { get; set; } -} \ No newline at end of file diff --git a/RelayClient/Models/SocketRtcSignalMessage.cs b/RelayClient/Models/SocketRtcSignalMessage.cs deleted file mode 100644 index 3cab9ff..0000000 --- a/RelayClient/Models/SocketRtcSignalMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayClient.Models; - -public class SocketRtcSignalMessage -{ - public required string Type { get; set; } // encrypted_rtc_signal - public required string SenderUsername { get; set; } - public required string ChannelId { get; set; } - - public required string CipherText { get; set; } - public required string Nonce { get; set; } - public required string Tag { get; set; } - public required string EncryptedKey { get; set; } -} \ No newline at end of file diff --git a/RelayClient/RelayClient.csproj b/RelayClient/RelayClient.csproj index 55adb8d..31ff824 100644 --- a/RelayClient/RelayClient.csproj +++ b/RelayClient/RelayClient.csproj @@ -54,4 +54,8 @@ + + + + diff --git a/RelayClient/Resources/Raw/wwwroot/index.js b/RelayClient/Resources/Raw/wwwroot/index.js index 9af4de3..9a97549 100644 --- a/RelayClient/Resources/Raw/wwwroot/index.js +++ b/RelayClient/Resources/Raw/wwwroot/index.js @@ -25,6 +25,7 @@ window.setChannelId = function(channelId) { currentChannelId = channelId; LogMessage("Channel set to: " + currentChannelId); }; + function LogMessage(msg) { const messageLog = document.getElementById("messageLog"); messageLog.value += '\r\n' + msg; diff --git a/RelayServer/Endpoints/RtcEndpoints.cs b/RelayServer/Endpoints/RtcEndpoints.cs index e44f176..2fc9c35 100644 --- a/RelayServer/Endpoints/RtcEndpoints.cs +++ b/RelayServer/Endpoints/RtcEndpoints.cs @@ -1,5 +1,5 @@ using System.Text.Json; -using RelayServer.Models.Rtc; +using RelayShared.Rtc; using RelayServer.Services.Rtc; namespace RelayServer.Endpoints; diff --git a/RelayServer/Models/Chat/SocketChannelList.cs b/RelayServer/Models/Chat/SocketChannelList.cs deleted file mode 100644 index f0f3635..0000000 --- a/RelayServer/Models/Chat/SocketChannelList.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayServer.Models; - -public class SocketChannelList -{ - public required string Type { get; set; } - public required List Channels { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Chat/SocketEncryptedMessage.cs b/RelayServer/Models/Chat/SocketEncryptedMessage.cs deleted file mode 100644 index 05896f1..0000000 --- a/RelayServer/Models/Chat/SocketEncryptedMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayServer.Models; - -public class SocketEncryptedMessage -{ - public required string Type { get; set; } - public required string SenderUsername { get; set; } - public string? RecipientUsername { get; set; } - public required string ChannelId { get; set; } - public required string CipherText { get; set; } - public required string Nonce { get; set; } - public required string Tag { get; set; } - public required string EncryptedKey { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Crypto/RtcSignalMessage.cs b/RelayServer/Models/Crypto/RtcSignalMessage.cs deleted file mode 100644 index 0ad9bd3..0000000 --- a/RelayServer/Models/Crypto/RtcSignalMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayServer.Models; - -public class RtcSignalMessage -{ - public required string Type { get; set; } // rtc_join / rtc_offer / rtc_answer / rtc_ice_candidate / rtc_leave - public required string From { get; set; } - public required string ChannelId { get; set; } - - public string? Sdp { get; set; } - public string? Candidate { get; set; } - public string? SdpMid { get; set; } - public int? SdpMLineIndex { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Crypto/ServerPublicKeyMessage.cs b/RelayServer/Models/Crypto/ServerPublicKeyMessage.cs deleted file mode 100644 index e5cc4f9..0000000 --- a/RelayServer/Models/Crypto/ServerPublicKeyMessage.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayServer.Models; - -public class ServerPublicKeyMessage -{ - public required string Type { get; set; } - public required string PublicKey { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Crypto/SocketRtcSignalMessage.cs b/RelayServer/Models/Crypto/SocketRtcSignalMessage.cs deleted file mode 100644 index 23b3a2b..0000000 --- a/RelayServer/Models/Crypto/SocketRtcSignalMessage.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace RelayServer.Models; - -public class SocketRtcSignalMessage -{ - public required string Type { get; set; } // encrypted_rtc_signal - public required string SenderUsername { get; set; } - public required string ChannelId { get; set; } - - public required string CipherText { get; set; } - public required string Nonce { get; set; } - public required string Tag { get; set; } - public required string EncryptedKey { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcActiveCall.cs b/RelayServer/Models/Rtc/RtcActiveCall.cs deleted file mode 100644 index c89f1a7..0000000 --- a/RelayServer/Models/Rtc/RtcActiveCall.cs +++ /dev/null @@ -1,14 +0,0 @@ -using SurrealDb.Net.Models; - -namespace RelayServer.Models.Rtc; - -public sealed class RtcActiveCall : Record -{ - public required string ChannelId { get; set; } - public string? OfferUser { get; set; } - public RtcSessionDescription? Offer { get; set; } - public RtcSessionDescription? Answer { get; set; } - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } - public bool IsActive { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcAnswer.cs b/RelayServer/Models/Rtc/RtcAnswer.cs deleted file mode 100644 index 2278152..0000000 --- a/RelayServer/Models/Rtc/RtcAnswer.cs +++ /dev/null @@ -1,12 +0,0 @@ -using SurrealDb.Net.Models; - -namespace RelayServer.Models.Rtc; - -public class RtcAnswer : Record -{ - public required string ChannelId { get; set; } - public required string OfferUser { get; set; } - public required string AnswerUser { get; set; } - public required string Sdp { get; set; } - public DateTime CreatedAt { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcIceCandidate.cs b/RelayServer/Models/Rtc/RtcIceCandidate.cs deleted file mode 100644 index 82e3efd..0000000 --- a/RelayServer/Models/Rtc/RtcIceCandidate.cs +++ /dev/null @@ -1,30 +0,0 @@ -using SurrealDb.Net.Models; - -namespace RelayServer.Models.Rtc; - -public class RtcIceCandidate : Record -{ - public required string ChannelId { get; set; } - public required string Username { get; set; } - public required string Candidate { get; set; } - public string? SdpMid { get; set; } - public int? SdpMLineIndex { get; set; } - // public required string Direction { get; set; } // "offer" or "answer" - public DateTime CreatedAt { get; set; } -} - -public class DBIceCandidate -{ - public required string ChannelId { get; set; } - public required string Username { get; set; } - public required IceCandidate Candidate { get; set; } -} - -public class IceCandidate -{ - public required string candidate { get; set; } - public required string sdpMid { get; set; } - public required int sdpMLineIndex { get; set; } - public required string usernameFragment { get; set; } - -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcJoinRequest.cs b/RelayServer/Models/Rtc/RtcJoinRequest.cs deleted file mode 100644 index c126a12..0000000 --- a/RelayServer/Models/Rtc/RtcJoinRequest.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayServer.Models.Rtc; - -public class RtcJoinRequest -{ - public required string ChannelId { get; set; } - public required string Username { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcJoinResponse.cs b/RelayServer/Models/Rtc/RtcJoinResponse.cs deleted file mode 100644 index da09179..0000000 --- a/RelayServer/Models/Rtc/RtcJoinResponse.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace RelayServer.Models.Rtc; - -public class RtcJoinResponse -{ - public required string ChannelId { get; set; } - public bool HasActiveCall { get; set; } - public bool IsOfferer { get; set; } - public string? OfferUser { get; set; } - public string? OfferSdp { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcLeaveRequest.cs b/RelayServer/Models/Rtc/RtcLeaveRequest.cs deleted file mode 100644 index 8b41fea..0000000 --- a/RelayServer/Models/Rtc/RtcLeaveRequest.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayServer.Models.Rtc; - -public class RtcLeaveRequest -{ - public required string ChannelId { get; set; } - public required string Username { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcNotificationMessage.cs b/RelayServer/Models/Rtc/RtcNotificationMessage.cs deleted file mode 100644 index dc22983..0000000 --- a/RelayServer/Models/Rtc/RtcNotificationMessage.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace RelayServer.Models.Rtc; - -public sealed class RtcNotificationMessage -{ - public required string Type { get; set; } // rtc_offer_updated / rtc_answer_updated / rtc_candidate_added - public required string ChannelId { get; set; } - public string? Username { get; set; } - public string? Direction { get; set; } -} - -public sealed class RtcIceNotificationMessage -{ - public required string Type { get; set; } - public required string ChannelId { get; set; } - public string? Username { get; set; } - public required IceCandidate Candidate { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcOffer.cs b/RelayServer/Models/Rtc/RtcOffer.cs deleted file mode 100644 index c11de01..0000000 --- a/RelayServer/Models/Rtc/RtcOffer.cs +++ /dev/null @@ -1,14 +0,0 @@ -using SurrealDb.Net.Models; - -namespace RelayServer.Models.Rtc; - -public class RtcOffer : Record -{ - public required string ChannelId { get; set; } - public required string Username { get; set; } - public required RtcSessionDescription SessionDescription { get; set; } - // public required string Type { get; set; } - // public required string Sdp { get; set; } - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Models/Rtc/RtcSessionDescription.cs b/RelayServer/Models/Rtc/RtcSessionDescription.cs deleted file mode 100644 index 28907f6..0000000 --- a/RelayServer/Models/Rtc/RtcSessionDescription.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RelayServer.Models.Rtc; - -public sealed class RtcSessionDescription -{ - public required string Type { get; set; } - public required string Sdp { get; set; } -} \ No newline at end of file diff --git a/RelayServer/Program.cs b/RelayServer/Program.cs index 2e7ff85..7be1a0e 100644 --- a/RelayServer/Program.cs +++ b/RelayServer/Program.cs @@ -3,6 +3,7 @@ using RelayServer.Services.Chat; using RelayServer.Services.Core; using RelayServer.Services.Data; using RelayServer.Services.Rtc; +using RelayShared.Rtc; using WebSocketSharp.Server; var surrealService = new SurrealService(); diff --git a/RelayServer/RelayServer.csproj b/RelayServer/RelayServer.csproj index 88a35cc..0943ae8 100644 --- a/RelayServer/RelayServer.csproj +++ b/RelayServer/RelayServer.csproj @@ -17,4 +17,8 @@ + + + + diff --git a/RelayServer/Services/Chat/ChatSocketBehavior.cs b/RelayServer/Services/Chat/ChatSocketBehavior.cs index 9fd9b89..9214a1e 100644 --- a/RelayServer/Services/Chat/ChatSocketBehavior.cs +++ b/RelayServer/Services/Chat/ChatSocketBehavior.cs @@ -6,6 +6,7 @@ using RelayServer.Services.Rtc; using WebSocketSharp; using WebSocketSharp.Server; using ErrorEventArgs = WebSocketSharp.ErrorEventArgs; +using RelayShared.Rtc; namespace RelayServer.Services.Chat; @@ -145,7 +146,7 @@ public class ChatSocketBehavior : WebSocketBehavior var channels = GetChannelsSync() .OrderBy(c => c.CreatedAt) - .Select(c => new SocketChannelInfo + .Select(c => new ChannelItem() { ChannelId = GetRecordId(c.Id), Name = c.Name, diff --git a/RelayServer/Services/Rtc/RtcCallService.cs b/RelayServer/Services/Rtc/RtcCallService.cs index c700323..ba36048 100644 --- a/RelayServer/Services/Rtc/RtcCallService.cs +++ b/RelayServer/Services/Rtc/RtcCallService.cs @@ -1,4 +1,4 @@ -using RelayServer.Models.Rtc; +using RelayShared.Rtc; using SurrealDb.Net; namespace RelayServer.Services.Rtc; diff --git a/RelayServer/Services/Rtc/RtcNotificationService.cs b/RelayServer/Services/Rtc/RtcNotificationService.cs index 1a6652b..37533fd 100644 --- a/RelayServer/Services/Rtc/RtcNotificationService.cs +++ b/RelayServer/Services/Rtc/RtcNotificationService.cs @@ -1,5 +1,5 @@ using System.Text.Json; -using RelayServer.Models.Rtc; +using RelayShared.Rtc; using WebSocketSharp.Server; namespace RelayServer.Services.Rtc; diff --git a/RelayShared/Rtc/RtcModels.cs b/RelayShared/Rtc/RtcModels.cs index a9a5d36..193d0a5 100644 --- a/RelayShared/Rtc/RtcModels.cs +++ b/RelayShared/Rtc/RtcModels.cs @@ -2,51 +2,118 @@ namespace RelayShared.Rtc; -public class RtcSignalTypes +public static class RtcSignalTypes { public const string Offer = "rtc_offer"; public const string Answer = "rtc_answer"; public const string Candidate = "rtc_candidate"; public const string OfferUpdated = "rtc_offer_updated"; public const string AnswerUpdated = "rtc_answer_updated"; + public const string CandidateAdded = "rtc_candidate_added"; + public const string CallLeft = "rtc_call_left"; } -public class RtcJoinRequest +public sealed class RtcSignalMessage { - public required string ChannelId { get; set; } - public required string Username { get; set; } + public string Type { get; set; } = string.Empty; + public string From { get; set; } = string.Empty; + public string ChannelId { get; set; } = string.Empty; + public string? Sdp { get; set; } + public string? Candidate { get; set; } + public string? SdpMid { get; set; } + public int? SdpMLineIndex { get; set; } + public bool IsInitiator { get; set; } +} + +public sealed class RtcNotificationMessage +{ + public string? Type { get; set; } + public string? ChannelId { get; set; } + public string? Username { get; set; } + public string? Direction { get; set; } +} + +public sealed class ServerPublicKeyMessage +{ + public string Type { get; set; } = string.Empty; + public string PublicKey { get; set; } = string.Empty; +} + +public sealed class SocketRtcSignalMessage +{ + public string Type { get; set; } = string.Empty; + public string SenderUsername { get; set; } = string.Empty; + public string ChannelId { get; set; } = string.Empty; + public string CipherText { get; set; } = string.Empty; + public string Nonce { get; set; } = string.Empty; + public string Tag { get; set; } = string.Empty; + public string EncryptedKey { get; set; } = string.Empty; +} + +public sealed class SocketEncryptedMessage +{ + public string Type { get; set; } = string.Empty; + public string SenderUsername { get; set; } = string.Empty; + public string RecipientUsername { get; set; } = string.Empty; + public string ChannelId { get; set; } = string.Empty; + public string CipherText { get; set; } = string.Empty; + public string Nonce { get; set; } = string.Empty; + public string Tag { get; set; } = string.Empty; + public string EncryptedKey { get; set; } = string.Empty; +} + +public sealed class ChannelItem +{ + public string ChannelId { get; set; } = string.Empty; + public string Name { get; set; } = string.Empty; + public DateTime CreatedAt { get; set; } +} + +public sealed class SocketChannelList +{ + public string Type { get; set; } = string.Empty; + public List Channels { get; set; } = []; +} + +public sealed class RtcJoinRequest +{ + public string ChannelId { get; set; } = string.Empty; + public string Username { get; set; } = string.Empty; +} + +public sealed class RtcJoinResponse +{ + public string ChannelId { get; set; } = string.Empty; + public bool HasActiveCall { get; set; } + public bool IsOfferer { get; set; } + public string? OfferUser { get; set; } + public RtcSessionDescription? OfferSdp { get; set; } +} + +public sealed class RtcLeaveRequest +{ + public string ChannelId { get; set; } = string.Empty; + public string Username { get; set; } = string.Empty; } public sealed class RtcSessionDescription { - public required string Type { get; set; } - public required string Sdp { get; set; } + public string Type { get; set; } = string.Empty; + public string Sdp { get; set; } = string.Empty; } -public class RtcOffer : Record +public sealed class RtcOffer { - public required string ChannelId { get; set; } - public required string Username { get; set; } - public required RtcSessionDescription SessionDescription { get; set; } - // public required string Type { get; set; } - // public required string Sdp { get; set; } - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } + public string ChannelId { get; set; } = string.Empty; + public string Username { get; set; } = string.Empty; + public RtcSessionDescription SessionDescription { get; set; } = new(); } -public class RtcLeaveRequest +public sealed class RtcAnswer { - public required string ChannelId { get; set; } - public required string Username { get; set; } -} - -public class RtcJoinResponse -{ - public required string ChannelId { get; set; } - public bool HasActiveCall { get; set; } - public bool IsOfferer { get; set; } - public string? OfferUser { get; set; } - public string? OfferSdp { get; set; } + public string ChannelId { get; set; } = string.Empty; + public string Username { get; set; } = string.Empty; + public RtcSessionDescription SessionDescription { get; set; } = new(); } public class RtcIceCandidate : Record @@ -76,18 +143,9 @@ public class IceCandidate } -public class RtcAnswer : Record -{ - public required string ChannelId { get; set; } - public required string OfferUser { get; set; } - public required string AnswerUser { get; set; } - public required string Sdp { get; set; } - public DateTime CreatedAt { get; set; } -} - public sealed class RtcActiveCall : Record { - public required string ChannelId { get; set; } + public string ChannelId { get; set; } = string.Empty; public string? OfferUser { get; set; } public RtcSessionDescription? Offer { get; set; } public RtcSessionDescription? Answer { get; set; }