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; }