From 9ad1d898ff9ef69ab03c02e7e098d6f81168f914 Mon Sep 17 00:00:00 2001 From: RuKira Date: Thu, 9 Apr 2026 10:51:04 -0400 Subject: [PATCH] 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