From d4e14a4fbfe457c0f0f0ed9209d3bbc9d6f8c182 Mon Sep 17 00:00:00 2001 From: cubic Date: Fri, 14 Apr 2023 02:40:15 +0100 Subject: [PATCH 01/14] Updated packages and dependencies --- .../BeatTogether.Core.Messaging.csproj | 12 +++++------ .../Implementations/BaseMessageDispatcher.cs | 2 +- .../Implementations/BaseUdpClient.cs | 21 ++++++++----------- .../Implementations/BaseUdpServer.cs | 19 ++++++++--------- .../BeatTogether.Core.Security.csproj | 6 +++--- BeatTogether.Core.sln | 16 +++++++------- dependencies/AsyncUdpServer | 1 + 7 files changed, 37 insertions(+), 40 deletions(-) create mode 160000 dependencies/AsyncUdpServer diff --git a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj index 9a04953..4e334da 100644 --- a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj +++ b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj @@ -1,7 +1,7 @@  - net5.0 + net6.0 9 icon.png pythonology @@ -17,15 +17,15 @@ - - - + + + - + true - NetCoreServer.dll + AsyncUdpServer.dll diff --git a/BeatTogether.Core.Messaging/Implementations/BaseMessageDispatcher.cs b/BeatTogether.Core.Messaging/Implementations/BaseMessageDispatcher.cs index 898f0de..b7c58e5 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseMessageDispatcher.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseMessageDispatcher.cs @@ -133,7 +133,7 @@ public void Send(ISession session, IMessage message) return; } - bufferWriter.WriteBool(false); // IsEncrypted + bufferWriter.WriteBool(false); // NotEncrypted _messageWriter.WriteTo(ref bufferWriter, message, PacketProperty); } else diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs index ff4b11a..99bea23 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs @@ -1,16 +1,16 @@ using System; using System.Net; using System.Net.Sockets; +using System.Threading; using System.Threading.Tasks; +using AsyncUdp; using BeatTogether.Core.Messaging.Abstractions; using BeatTogether.Core.Messaging.Messages; using Serilog; namespace BeatTogether.Core.Messaging.Implementations { - using UdpClient = NetCoreServer.UdpClient; - - public abstract class BaseUdpClient : UdpClient + public abstract class BaseUdpClient : AsyncUdpServer { public ISession Session { get; } @@ -22,7 +22,7 @@ public BaseUdpClient( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint) + : base(endPoint, true) { Session = GetSession(endPoint); @@ -39,7 +39,7 @@ public BaseUdpClient( $"(EndPoint='{session.EndPoint}', " + $"Data='{BitConverter.ToString(data)}')." ); - SendAsync(session.EndPoint, data); + _ = SendAsync(session.EndPoint, data, CancellationToken.None); }; _messageSource.Subscribe((session, message) => { @@ -66,18 +66,15 @@ public BaseUdpClient( #region Protected Methods - protected override void OnConnected() => ReceiveAsync(); - - protected override void OnReceived(EndPoint endPoint, ReadOnlySpan buffer) + protected override void OnReceived(EndPoint endpoint, Memory buffer) { _logger.Verbose( "Handling OnReceived " + - $"(EndPoint='{endPoint}', " + + $"(EndPoint='{endpoint}', " + $"Data='{BitConverter.ToString(buffer.ToArray())}')." - ); +); if (buffer.Length > 0) - _messageSource.Signal(Session, buffer); - ReceiveAsync(); + _messageSource.Signal(Session, buffer.Span); } protected override void OnError(SocketError error) => diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs index 0075382..b271538 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs @@ -1,15 +1,16 @@ using System; using System.Net; using System.Net.Sockets; +using System.Threading; using System.Threading.Tasks; +using AsyncUdp; using BeatTogether.Core.Messaging.Abstractions; using BeatTogether.Core.Messaging.Messages; -using NetCoreServer; using Serilog; namespace BeatTogether.Core.Messaging.Implementations { - public abstract class BaseUdpServer : UdpServer + public abstract class BaseUdpServer : AsyncUdpServer { private readonly IMessageSource _messageSource; private readonly IMessageDispatcher _messageDispatcher; @@ -19,7 +20,7 @@ public BaseUdpServer( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint) + : base(endPoint, true) { _messageSource = messageSource; _messageDispatcher = messageDispatcher; @@ -27,12 +28,13 @@ public BaseUdpServer( _messageDispatcher.OnSent += (session, buffer) => { + var data = buffer.ToArray(); _logger.Verbose( "Handling OnSent " + $"(EndPoint='{session.EndPoint}', " + - $"Data='{BitConverter.ToString(buffer.ToArray())}')." + $"Data='{BitConverter.ToString(data)}')." ); - SendAsync(session.EndPoint, buffer); + _ = SendAsync(session.EndPoint, data, CancellationToken.None); }; _messageSource.Subscribe((session, message) => { @@ -59,9 +61,7 @@ public BaseUdpServer( #region Protected Methods - protected override void OnStarted() => ReceiveAsync(); - - protected override void OnReceived(EndPoint endPoint, ReadOnlySpan buffer) + protected override void OnReceived(EndPoint endPoint, Memory buffer) { _logger.Verbose( "Handling OnReceived " + @@ -71,9 +71,8 @@ protected override void OnReceived(EndPoint endPoint, ReadOnlySpan buffer) if (buffer.Length > 0) { var session = GetSession(endPoint); - _messageSource.Signal(session, buffer); + _messageSource.Signal(session, buffer.Span); } - ReceiveAsync(); } protected override void OnError(SocketError error) => diff --git a/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj b/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj index 74c4d72..79966f9 100644 --- a/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj +++ b/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj @@ -1,7 +1,7 @@ - net5.0 + net6.0 9 icon.png pythonology @@ -16,8 +16,8 @@ - - + + diff --git a/BeatTogether.Core.sln b/BeatTogether.Core.sln index c396a5e..8dcd75f 100644 --- a/BeatTogether.Core.sln +++ b/BeatTogether.Core.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29926.136 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32819.101 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BeatTogether.Core.Messaging", "BeatTogether.Core.Messaging\BeatTogether.Core.Messaging.csproj", "{E28CDCB2-AA4A-4D2D-8CCB-1F3B3D7A70BE}" EndProject @@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BeatTogether.Core.Security" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dependencies", "dependencies", "{68C43D6A-C8F7-4BE0-96DB-3B576B666C8E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetCoreServer", "dependencies\NetCoreServer\source\NetCoreServer\NetCoreServer.csproj", "{5C1D006F-2301-47A7-9C67-9CF16A888D8B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsyncUdpServer", "dependencies\AsyncUdpServer\AsyncUdpServer\AsyncUdpServer.csproj", "{B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -25,16 +25,16 @@ Global {CBA6EFCD-ABBF-49AA-B9F7-4F3AAC4821CF}.Debug|Any CPU.Build.0 = Debug|Any CPU {CBA6EFCD-ABBF-49AA-B9F7-4F3AAC4821CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {CBA6EFCD-ABBF-49AA-B9F7-4F3AAC4821CF}.Release|Any CPU.Build.0 = Release|Any CPU - {5C1D006F-2301-47A7-9C67-9CF16A888D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C1D006F-2301-47A7-9C67-9CF16A888D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C1D006F-2301-47A7-9C67-9CF16A888D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C1D006F-2301-47A7-9C67-9CF16A888D8B}.Release|Any CPU.Build.0 = Release|Any CPU + {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {5C1D006F-2301-47A7-9C67-9CF16A888D8B} = {68C43D6A-C8F7-4BE0-96DB-3B576B666C8E} + {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0} = {68C43D6A-C8F7-4BE0-96DB-3B576B666C8E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D074D30D-60D5-4042-9867-E4E6F4EAB464} diff --git a/dependencies/AsyncUdpServer b/dependencies/AsyncUdpServer new file mode 160000 index 0000000..81b2d72 --- /dev/null +++ b/dependencies/AsyncUdpServer @@ -0,0 +1 @@ +Subproject commit 81b2d7284dbc7fedb661caab2bfdf571ea607151 From 834072357b7d7e59441030ee0b455694dd3bd7fb Mon Sep 17 00:00:00 2001 From: cubic Date: Fri, 14 Apr 2023 02:40:50 +0100 Subject: [PATCH 02/14] Bumped package versions --- .../BeatTogether.Core.Messaging.csproj | 2 +- BeatTogether.Core.Security/BeatTogether.Core.Security.csproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj index 4e334da..63bd8ef 100644 --- a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj +++ b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj @@ -7,7 +7,7 @@ pythonology pythonology https://github.com/pythonology/BeatTogether.Core - 1.8.0 + 1.9.0 enable $(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage diff --git a/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj b/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj index 79966f9..36fc822 100644 --- a/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj +++ b/BeatTogether.Core.Security/BeatTogether.Core.Security.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -7,7 +7,7 @@ pythonology pythonology https://github.com/pythonology/BeatTogether.Core - 1.1.0 + 1.2.0 enable From bf01849d14074db883506272b7b5b2246a66c8d5 Mon Sep 17 00:00:00 2001 From: cubic <79692655+cubicgraphics@users.noreply.github.com> Date: Fri, 14 Apr 2023 02:41:19 +0100 Subject: [PATCH 03/14] Update nuget.yml --- .github/workflows/nuget.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index d79fb0e..c247324 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -3,6 +3,7 @@ on: push: branches: - master + - Net6.0 jobs: nuget-1: From a756b07d666ff719061372186ccdfe0781842588 Mon Sep 17 00:00:00 2001 From: cubic <79692655+cubicgraphics@users.noreply.github.com> Date: Fri, 14 Apr 2023 02:44:36 +0100 Subject: [PATCH 04/14] Update .gitmodules --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index a9456de..2e62ac3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "dependencies/NetCoreServer"] - path = dependencies/NetCoreServer - url = https://github.com/chandler14362/NetCoreServer.git +[submodule "dependencies/AsyncUdpServer"] + path = dependencies/AsyncUdpServer + url = https://github.com/cubicgraphics/AsyncUdpServer.git From 3d2778c2faf9315172b4526683173e2eef93cdfd Mon Sep 17 00:00:00 2001 From: cubic Date: Fri, 14 Apr 2023 02:49:00 +0100 Subject: [PATCH 05/14] Fix submodule --- dependencies/NetCoreServer | 1 - 1 file changed, 1 deletion(-) delete mode 160000 dependencies/NetCoreServer diff --git a/dependencies/NetCoreServer b/dependencies/NetCoreServer deleted file mode 160000 index 0b273fc..0000000 --- a/dependencies/NetCoreServer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0b273fc15affea09df450f026b2eff72f090e671 From e4a41471c5aceb8bf42429176244dc729f99bebf Mon Sep 17 00:00:00 2001 From: cubic <79692655+cubicgraphics@users.noreply.github.com> Date: Fri, 14 Apr 2023 03:54:07 +0100 Subject: [PATCH 06/14] Update nuget.yml --- .github/workflows/nuget.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index c247324..59b755a 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -16,7 +16,7 @@ jobs: submodules: 'recursive' - uses: actions/setup-dotnet@v3 with: - dotnet-version: 5.0.400 + dotnet-version: 6.0.x source-url: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json env: NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} @@ -38,7 +38,7 @@ jobs: submodules: 'recursive' - uses: actions/setup-dotnet@v3 with: - dotnet-version: 5.0.400 + dotnet-version: 6.0.x source-url: https://api.nuget.org/v3/index.json env: NUGET_AUTH_TOKEN: ${{secrets.NUGET_API_KEY}} From e6d2866768ddc2548daca582fc267320653bd1fa Mon Sep 17 00:00:00 2001 From: cubic Date: Sat, 15 Apr 2023 15:01:57 +0100 Subject: [PATCH 07/14] Disable async recieve and sending of packets --- BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj | 2 +- BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs | 2 +- BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj index 63bd8ef..3729c29 100644 --- a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj +++ b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj @@ -7,7 +7,7 @@ pythonology pythonology https://github.com/pythonology/BeatTogether.Core - 1.9.0 + 1.9.1 enable $(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs index 99bea23..4a31853 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs @@ -22,7 +22,7 @@ public BaseUdpClient( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint, true) + : base(endPoint, false) { Session = GetSession(endPoint); diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs index b271538..fc19870 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs @@ -20,7 +20,7 @@ public BaseUdpServer( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint, true) + : base(endPoint, false) { _messageSource = messageSource; _messageDispatcher = messageDispatcher; From 139d4beb179ac45e630daef254eafe2a2b394888 Mon Sep 17 00:00:00 2001 From: cubic Date: Sat, 15 Apr 2023 23:22:33 +0100 Subject: [PATCH 08/14] Bump to new UdpServer version - much improved recieve performance --- .../Implementations/BaseUdpClient.cs | 7 ++----- .../Implementations/BaseUdpServer.cs | 7 ++----- dependencies/AsyncUdpServer | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs index 4a31853..4cccb24 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs @@ -22,7 +22,7 @@ public BaseUdpClient( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint, false) + : base(endPoint, false, 1) { Session = GetSession(endPoint); @@ -39,7 +39,7 @@ public BaseUdpClient( $"(EndPoint='{session.EndPoint}', " + $"Data='{BitConverter.ToString(data)}')." ); - _ = SendAsync(session.EndPoint, data, CancellationToken.None); + SendAsync(session.EndPoint, data); }; _messageSource.Subscribe((session, message) => { @@ -77,9 +77,6 @@ protected override void OnReceived(EndPoint endpoint, Memory buffer) _messageSource.Signal(Session, buffer.Span); } - protected override void OnError(SocketError error) => - _logger.Error($"Handling OnError (Error={error})."); - #endregion } } diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs index fc19870..f11ca1d 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs @@ -20,7 +20,7 @@ public BaseUdpServer( IPEndPoint endPoint, IMessageSource messageSource, IMessageDispatcher messageDispatcher) - : base(endPoint, false) + : base(endPoint, false, 0) { _messageSource = messageSource; _messageDispatcher = messageDispatcher; @@ -34,7 +34,7 @@ public BaseUdpServer( $"(EndPoint='{session.EndPoint}', " + $"Data='{BitConverter.ToString(data)}')." ); - _ = SendAsync(session.EndPoint, data, CancellationToken.None); + SendAsync(session.EndPoint, data); }; _messageSource.Subscribe((session, message) => { @@ -75,9 +75,6 @@ protected override void OnReceived(EndPoint endPoint, Memory buffer) } } - protected override void OnError(SocketError error) => - _logger.Error($"Handling OnError (Error={error})."); - #endregion } } diff --git a/dependencies/AsyncUdpServer b/dependencies/AsyncUdpServer index 81b2d72..c4ae5e7 160000 --- a/dependencies/AsyncUdpServer +++ b/dependencies/AsyncUdpServer @@ -1 +1 @@ -Subproject commit 81b2d7284dbc7fedb661caab2bfdf571ea607151 +Subproject commit c4ae5e73a04520acc33f3e76c103b13743fb28dc From 3282186f325fd29856a1b60377eac10ffcd8a29d Mon Sep 17 00:00:00 2001 From: cubic Date: Sat, 15 Apr 2023 23:23:31 +0100 Subject: [PATCH 09/14] Bump ver --- BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj | 2 +- BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs | 2 -- BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj index 3729c29..62acc04 100644 --- a/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj +++ b/BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj @@ -7,7 +7,7 @@ pythonology pythonology https://github.com/pythonology/BeatTogether.Core - 1.9.1 + 1.9.2 enable $(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs index 4cccb24..27144f6 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs @@ -1,7 +1,5 @@ using System; using System.Net; -using System.Net.Sockets; -using System.Threading; using System.Threading.Tasks; using AsyncUdp; using BeatTogether.Core.Messaging.Abstractions; diff --git a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs index f11ca1d..0cd9feb 100644 --- a/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs +++ b/BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs @@ -1,7 +1,5 @@ using System; using System.Net; -using System.Net.Sockets; -using System.Threading; using System.Threading.Tasks; using AsyncUdp; using BeatTogether.Core.Messaging.Abstractions; From 8341b019a6dd7ba1f76febe3443427d85941b227 Mon Sep 17 00:00:00 2001 From: cubic Date: Thu, 9 May 2024 05:35:43 +0100 Subject: [PATCH 10/14] Unified core types for master server and dedi server --- .../Abstractions/ILayer1.cs | 21 +++++++ .../Abstractions/ILayer2.cs | 29 +++++++++ .../Abstractions/IPlayer.cs | 14 +++++ .../Abstractions/IServerInstance.cs | 34 ++++++++++ .../BeatTogether.Core.csproj | 15 +++++ .../Enums/BeatmapDifficultyMask.cs | 14 +++++ .../Enums/CountdownState.cs | 10 +++ .../Enums/DiscoveryPolicy.cs | 9 +++ .../Enums/GameplayModifiersMask.cs | 26 ++++++++ .../Enums/GameplayServerControlSettings.cs | 11 ++++ .../Enums/GameplayServerMode.cs | 10 +++ .../Enums/GameplayState.cs | 11 ++++ .../Enums/InvitePolicy.cs | 8 +++ .../Enums/MultiplayerGameState.cs | 9 +++ .../Enums/Platform.cs | 17 +++++ .../Enums/SongSelectionMode.cs | 11 ++++ .../BinaryBufferReaderExtensions.cs | 56 +++++++++++++++++ .../BinaryBufferWriterExtensions.cs | 53 ++++++++++++++++ .../Models/GameplayServerConfiguration.cs | 33 ++++++++++ .../ServerMessaging/PlayerAutoBusMessage.cs | 24 +++++++ .../ServerMessaging/ServerAutobusMessage.cs | 62 +++++++++++++++++++ BeatTogether.Core.sln | 6 ++ 22 files changed, 483 insertions(+) create mode 100644 BeatTogether.Core.ServerMessaging/Abstractions/ILayer1.cs create mode 100644 BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs create mode 100644 BeatTogether.Core.ServerMessaging/Abstractions/IPlayer.cs create mode 100644 BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs create mode 100644 BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj create mode 100644 BeatTogether.Core.ServerMessaging/Enums/BeatmapDifficultyMask.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/CountdownState.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/DiscoveryPolicy.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/GameplayModifiersMask.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/GameplayServerControlSettings.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/GameplayServerMode.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/GameplayState.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/InvitePolicy.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/MultiplayerGameState.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/Platform.cs create mode 100644 BeatTogether.Core.ServerMessaging/Enums/SongSelectionMode.cs create mode 100644 BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs create mode 100644 BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs create mode 100644 BeatTogether.Core.ServerMessaging/Models/GameplayServerConfiguration.cs create mode 100644 BeatTogether.Core.ServerMessaging/ServerMessaging/PlayerAutoBusMessage.cs create mode 100644 BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/ILayer1.cs b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer1.cs new file mode 100644 index 0000000..b3acbc9 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer1.cs @@ -0,0 +1,21 @@ + +using BeatTogether.Core.Abstractions; + +namespace BeatTogether.Core.ServerMessaging +{ + //we will have 3 parts. + //Api is a stage1, it handles only gamelift requests. + //node service is a stage1 and a stage2, it handles the master servers list of servers, extra api requests, and all the node related things + //Dedi server is a stage2, it handles all instance logic + + public interface ILayer1 //Layer 2 calls these to inform layer 1. This is contained in layer 1. If layer2 can find this on layer1, then attatch then to events. + { + public void PlayerJoined(IServerInstance instance, IPlayer player); + public void PlayerLeft(IServerInstance instance, IPlayer player); + public void InstanceClosed(IServerInstance instance); + public void InstanceCreated(IServerInstance instance); + public void InstanceConfigChanged(IServerInstance instance); + public void InstanceStateChanged(IServerInstance instance); + public void InstancePlayersChanged(IServerInstance instance); + } +} diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs new file mode 100644 index 0000000..37ba779 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs @@ -0,0 +1,29 @@ +using BeatTogether.Core.Enums; + +namespace BeatTogether.Core.Abstractions +{ + //we will have 3 parts. + //Api is a stage1, it handles only gamelift requests. + //node service is a stage1 and a stage2, it handles the master servers list of servers, extra api requests, and all the node related things + //Dedi server is a stage2, it handles all instance logic + + public interface ILayer2 //Layer 1 calls these to control layer 2 + { + //Response from these should be awaited when using node server, instant on single exe server + public Task CreateInstance(IServerInstance serverInstance); + public Task CloseInstance(string InstanceSecret); + public Task SetPlayerSessionData(string InstanceSecret, IPlayer playerSessionData); + public Task DisconnectPlayer(string InstanceSecret, string PlayerUserId); + + public Task GetServer(string secret); + public Task GetServerByCode(string code); + public Task GetAvailablePublicServer( + InvitePolicy invitePolicy, + GameplayServerMode serverMode, + SongSelectionMode songMode, + GameplayServerControlSettings serverControlSettings, + BeatmapDifficultyMask difficultyMask, + GameplayModifiersMask modifiersMask, + string songPackMasks); + } +} diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/IPlayer.cs b/BeatTogether.Core.ServerMessaging/Abstractions/IPlayer.cs new file mode 100644 index 0000000..7c9dbfd --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Abstractions/IPlayer.cs @@ -0,0 +1,14 @@ +using BeatTogether.Core.Enums; + +namespace BeatTogether.Core.Abstractions +{ + public interface IPlayer + { + public string HashedUserId { get; set; } + public string PlatformUserId { get; set; } + public string PlayerSessionId { get; set; } + public Platform PlayerPlatform { get; set; } + public Version PlayerClientVersion { get; set; } + } + +} diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs b/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs new file mode 100644 index 0000000..3ec73aa --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs @@ -0,0 +1,34 @@ +using BeatTogether.Core.Models; +using BeatTogether.Core.Enums; +using System.Net; + +namespace BeatTogether.Core.Abstractions +{ + public interface IServerInstance + { + public string ServerName { get; set; } + public IPEndPoint InstanceEndPoint { get; set; } + public string Secret { get; set; } + public string Code { get; set; } + public MultiplayerGameState GameState { get; set; } + public BeatmapDifficultyMask BeatmapDifficultyMask { get; set; } + public GameplayModifiersMask GameplayModifiersMask { get; set; } + public GameplayServerConfiguration GameplayServerConfiguration { get; set; } + public string SongPackMasks { get; set; } + public HashSet PlayerHashes { get; set; } + public string InstanceId { get; set; } + public string ManagerId { get; set; } + public bool PermanentManager { get; set; } + public long ServerStartJoinTimeout { get; set; } //Milliseconds + public bool NeverCloseServer { get; set; } + public long ResultScreenTime { get; set; } + public long BeatmapStartTime { get; set; } + public long PlayersReadyCountdownTime { get; set; } + public bool AllowPerPlayerModifiers { get; set; } + public bool AllowPerPlayerDifficulties { get; set; } + public bool AllowChroma { get; set; } + public bool AllowME { get; set; } + public bool AllowNE { get; set; } + } + +} diff --git a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj new file mode 100644 index 0000000..210133b --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj @@ -0,0 +1,15 @@ + + + + net6.0 + enable + enable + 1.0.3 + BeatTogether + + + + + + + diff --git a/BeatTogether.Core.ServerMessaging/Enums/BeatmapDifficultyMask.cs b/BeatTogether.Core.ServerMessaging/Enums/BeatmapDifficultyMask.cs new file mode 100644 index 0000000..c3ed0b9 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/BeatmapDifficultyMask.cs @@ -0,0 +1,14 @@ + +namespace BeatTogether.Core.Enums +{ + [Flags] + public enum BeatmapDifficultyMask : byte + { + Easy = 1, + Normal = 2, + Hard = 4, + Expert = 8, + ExpertPlus = 16, + All = 31 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/CountdownState.cs b/BeatTogether.Core.ServerMessaging/Enums/CountdownState.cs new file mode 100644 index 0000000..d2ab5f5 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/CountdownState.cs @@ -0,0 +1,10 @@ +namespace BeatTogether.Core.Enums +{ + public enum CountdownState : byte + { + NotCountingDown = 0, + CountingDown = 1, + StartBeatmapCountdown = 2, + WaitingForEntitlement = 3 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/DiscoveryPolicy.cs b/BeatTogether.Core.ServerMessaging/Enums/DiscoveryPolicy.cs new file mode 100644 index 0000000..9ed46af --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/DiscoveryPolicy.cs @@ -0,0 +1,9 @@ +namespace BeatTogether.Core.Enums +{ + public enum DiscoveryPolicy : byte + { + Hidden = 0, + WithCode = 1, + Public = 2 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/GameplayModifiersMask.cs b/BeatTogether.Core.ServerMessaging/Enums/GameplayModifiersMask.cs new file mode 100644 index 0000000..bce30c6 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/GameplayModifiersMask.cs @@ -0,0 +1,26 @@ + +namespace BeatTogether.Core.Enums +{ + [Flags] + public enum GameplayModifiersMask : ushort + { + None = 0, + BatteryEnergy = 1, + NoFail = 2, + InstaFail = 4, + NoObstacles = 8, + NoBombs = 16, + FastNotes = 32, + StrictAngles = 64, + DisappearingArrows = 128, + FasterSong = 256, + SlowerSong = 512, + NoArrows = 1024, + GhostNotes = 2048, + SuperFastSong = 4096, + ProMode = 8192, + ZenMode = 16384, + SmallCubes = 32768, + All = 65535 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/GameplayServerControlSettings.cs b/BeatTogether.Core.ServerMessaging/Enums/GameplayServerControlSettings.cs new file mode 100644 index 0000000..769d702 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/GameplayServerControlSettings.cs @@ -0,0 +1,11 @@ +namespace BeatTogether.Core.Enums +{ + [Flags] + public enum GameplayServerControlSettings + { + None = 0, + AllowModifierSelection = 1, + AllowSpectate = 2, + All = 3 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/GameplayServerMode.cs b/BeatTogether.Core.ServerMessaging/Enums/GameplayServerMode.cs new file mode 100644 index 0000000..b579671 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/GameplayServerMode.cs @@ -0,0 +1,10 @@ +namespace BeatTogether.Core.Enums +{ + public enum GameplayServerMode + { + Countdown = 0, + Managed = 1, + QuickStartOneSong = 2, + Tournament = 3 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/GameplayState.cs b/BeatTogether.Core.ServerMessaging/Enums/GameplayState.cs new file mode 100644 index 0000000..b620847 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/GameplayState.cs @@ -0,0 +1,11 @@ +namespace BeatTogether.Core.Enums +{ + public enum GameplayState : byte + { + None = 0, + SceneLoad = 1, + SongLoad = 1, + Gameplay = 2, + Results = 3 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/InvitePolicy.cs b/BeatTogether.Core.ServerMessaging/Enums/InvitePolicy.cs new file mode 100644 index 0000000..272b1e9 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/InvitePolicy.cs @@ -0,0 +1,8 @@ +namespace BeatTogether.Core.Enums +{ + public enum InvitePolicy : byte + { + OnlyConnectionOwnerCanInvite = 0, + AnyoneCanInvite = 1 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/MultiplayerGameState.cs b/BeatTogether.Core.ServerMessaging/Enums/MultiplayerGameState.cs new file mode 100644 index 0000000..e4d9f04 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/MultiplayerGameState.cs @@ -0,0 +1,9 @@ +namespace BeatTogether.Core.Enums +{ + public enum MultiplayerGameState : byte + { + None = 0, + Lobby = 1, + Game = 2 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Enums/Platform.cs b/BeatTogether.Core.ServerMessaging/Enums/Platform.cs new file mode 100644 index 0000000..d162cb1 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/Platform.cs @@ -0,0 +1,17 @@ +namespace BeatTogether.Core.Enums +{ + public enum Platform : byte + { + Test, + OculusRift, + OculusQuest, + Steam, + PS4, + PS4Dev, + PS4Cert, + PS5, + PS5Dev, + PS5Cert, + Oculus = 1 + } +} \ No newline at end of file diff --git a/BeatTogether.Core.ServerMessaging/Enums/SongSelectionMode.cs b/BeatTogether.Core.ServerMessaging/Enums/SongSelectionMode.cs new file mode 100644 index 0000000..ca3dce3 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Enums/SongSelectionMode.cs @@ -0,0 +1,11 @@ +namespace BeatTogether.Core.Enums +{ + public enum SongSelectionMode + { + Vote = 0, + Random = 1, + ManagerPicks = 2, + RandomPlayerPicks = 3, + ServerPicks = 4 + } +} diff --git a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs new file mode 100644 index 0000000..d42f8cf --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs @@ -0,0 +1,56 @@ +using BeatTogether.Core.Enums; +using BeatTogether.Core.ServerMessaging.Models; +using BinaryRecords; + +namespace BeatTogether.Core.Extensions +{ + public static class BinaryBufferReaderExtensions + { + public static Player ReadPlayer(this ref BinaryBufferReader bufferReader) + { + var Player = new Player(); + Player.PlayerPlatform = (Platform)bufferReader.ReadUInt8(); + Player.PlayerSessionId = bufferReader.ReadUTF16String(); + Player.PlayerClientVersion = bufferReader.ReadUTF16String(); + Player.HashedUserId = bufferReader.ReadUTF16String(); + Player.PlatformUserId = bufferReader.ReadUTF16String(); + return Player; + } + + public static Server ReadServer(this ref BinaryBufferReader bufferReader) + { + var server = new Server(); + + server.ServerName = bufferReader.ReadUTF16String(); + server.Secret = bufferReader.ReadUTF16String(); + server.Code = bufferReader.ReadUTF16String(); + server.InstanceId = bufferReader.ReadUTF16String(); + + server.GameState = (MultiplayerGameState)bufferReader.ReadUInt8(); + server.BeatmapDifficultyMask = (BeatmapDifficultyMask)bufferReader.ReadUInt8(); + server.GameplayModifiersMask = (GameplayModifiersMask)bufferReader.ReadUInt16(); + server.GameplayServerConfiguration.MaxPlayerCount = bufferReader.ReadInt16(); + server.GameplayServerConfiguration.DiscoveryPolicy = (DiscoveryPolicy)bufferReader.ReadUInt8(); + server.GameplayServerConfiguration.InvitePolicy = (InvitePolicy)bufferReader.ReadUInt8(); + server.GameplayServerConfiguration.GameplayServerMode = (GameplayServerMode)bufferReader.ReadUInt8(); + server.GameplayServerConfiguration.SongSelectionMode = (SongSelectionMode)bufferReader.ReadUInt8(); + server.GameplayServerConfiguration.GameplayServerControlSettings = (GameplayServerControlSettings)bufferReader.ReadUInt8(); + server.SongPackMasks = bufferReader.ReadUTF16String(); + + server.ManagerId = bufferReader.ReadUTF16String(); + server.PermanentManager = bufferReader.ReadBool(); + server.ServerStartJoinTimeout = bufferReader.ReadInt64(); + server.NeverCloseServer = bufferReader.ReadBool(); + server.ResultScreenTime = bufferReader.ReadInt64(); + server.BeatmapStartTime = bufferReader.ReadInt64(); + server.PlayersReadyCountdownTime = bufferReader.ReadInt64(); + server.AllowPerPlayerModifiers = bufferReader.ReadBool(); + server.AllowPerPlayerDifficulties = bufferReader.ReadBool(); + server.AllowChroma = bufferReader.ReadBool(); + server.AllowME = bufferReader.ReadBool(); + server.AllowNE = bufferReader.ReadBool(); + + return server; + } + } +} diff --git a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs new file mode 100644 index 0000000..febefdb --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs @@ -0,0 +1,53 @@ +using BeatTogether.Core.ServerMessaging.Models; +using BinaryRecords; + +namespace BeatTogether.Core.Extensions +{ + public static class BinaryBufferWriterExtensions + { + public static void WritePlayer(this ref BinaryBufferWriter bufferWriter, Player player) + { + bufferWriter.WriteUInt8((byte)player.PlayerPlatform); + bufferWriter.WriteUTF16String(player.PlayerSessionId); + bufferWriter.WriteUTF16String(player.PlayerClientVersion); + bufferWriter.WriteUTF16String(player.HashedUserId); + bufferWriter.WriteUTF16String(player.PlatformUserId); + } + + + public static void WriteServer(this ref BinaryBufferWriter bufferWriter, Server server) + { + bufferWriter.WriteUTF16String(server.ServerName); + bufferWriter.WriteUTF16String(server.Secret); + bufferWriter.WriteUTF16String(server.Code); + bufferWriter.WriteUTF16String(server.InstanceId); + + bufferWriter.WriteUInt8((byte)server.GameState); + bufferWriter.WriteUInt8((byte)server.BeatmapDifficultyMask); + bufferWriter.WriteUInt16((ushort)server.GameplayModifiersMask); + + bufferWriter.WriteUInt16((ushort)server.GameplayServerConfiguration.MaxPlayerCount); + bufferWriter.WriteUInt8((byte)server.GameplayServerConfiguration.DiscoveryPolicy); + bufferWriter.WriteUInt8((byte)server.GameplayServerConfiguration.InvitePolicy); + bufferWriter.WriteUInt8((byte)server.GameplayServerConfiguration.GameplayServerMode); + bufferWriter.WriteUInt8((byte)server.GameplayServerConfiguration.SongSelectionMode); + bufferWriter.WriteUInt8((byte)server.GameplayServerConfiguration.GameplayServerControlSettings); + + bufferWriter.WriteUTF16String(server.SongPackMasks); + + bufferWriter.WriteUTF16String(server.ManagerId); + bufferWriter.WriteBool(server.PermanentManager); + bufferWriter.WriteInt64(server.ServerStartJoinTimeout); + bufferWriter.WriteBool(server.NeverCloseServer); + bufferWriter.WriteInt64(server.ResultScreenTime); + bufferWriter.WriteInt64(server.BeatmapStartTime); + bufferWriter.WriteInt64(server.PlayersReadyCountdownTime); + + bufferWriter.WriteBool(server.AllowPerPlayerModifiers); + bufferWriter.WriteBool(server.AllowPerPlayerDifficulties); + bufferWriter.WriteBool(server.AllowChroma); + bufferWriter.WriteBool(server.AllowME); + bufferWriter.WriteBool(server.AllowNE); + } + } +} diff --git a/BeatTogether.Core.ServerMessaging/Models/GameplayServerConfiguration.cs b/BeatTogether.Core.ServerMessaging/Models/GameplayServerConfiguration.cs new file mode 100644 index 0000000..e729eec --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Models/GameplayServerConfiguration.cs @@ -0,0 +1,33 @@ +using BeatTogether.Core.Enums; + +namespace BeatTogether.Core.Models +{ + public class GameplayServerConfiguration + { + public int MaxPlayerCount { get; set; } = 5; + public DiscoveryPolicy DiscoveryPolicy { get; set; } + public InvitePolicy InvitePolicy { get; set; } + public GameplayServerMode GameplayServerMode { get; set; } + public SongSelectionMode SongSelectionMode { get; set; } + public GameplayServerControlSettings GameplayServerControlSettings { get; set; } + + public GameplayServerConfiguration( + int maxPlayerCount, + DiscoveryPolicy discoveryPolicy, + InvitePolicy invitePolicy, + GameplayServerMode gameplayServerMode, + SongSelectionMode songSelectionMode, + GameplayServerControlSettings gameplayServerControlSettings) + { + MaxPlayerCount = maxPlayerCount; + DiscoveryPolicy = discoveryPolicy; + InvitePolicy = invitePolicy; + GameplayServerMode = gameplayServerMode; + SongSelectionMode = songSelectionMode; + GameplayServerControlSettings = gameplayServerControlSettings; + } + + public GameplayServerConfiguration() { } + } +} + diff --git a/BeatTogether.Core.ServerMessaging/ServerMessaging/PlayerAutoBusMessage.cs b/BeatTogether.Core.ServerMessaging/ServerMessaging/PlayerAutoBusMessage.cs new file mode 100644 index 0000000..d3e5f75 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/ServerMessaging/PlayerAutoBusMessage.cs @@ -0,0 +1,24 @@ +using BeatTogether.Core.Abstractions; +using BeatTogether.Core.Enums; + +namespace BeatTogether.Core.ServerMessaging.Models +{ + public class Player + { + public Player(IPlayer player) + { + HashedUserId = player.HashedUserId; + PlatformUserId = player.PlatformUserId; + PlayerSessionId = player.PlayerSessionId; + PlayerPlatform = player.PlayerPlatform; + PlayerClientVersion = player.PlayerClientVersion.ToString(); + } + public Player() { } + + public string HashedUserId { get; set; } = string.Empty; + public string PlatformUserId { get; set; } = string.Empty; + public string PlayerSessionId { get; set; } = string.Empty; + public Platform PlayerPlatform { get; set; } + public string PlayerClientVersion { get; set; } = string.Empty; + } +} diff --git a/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs b/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs new file mode 100644 index 0000000..17e7206 --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs @@ -0,0 +1,62 @@ +using BeatTogether.Core.Abstractions; +using BeatTogether.Core.Enums; +using BeatTogether.Core.Models; + +namespace BeatTogether.Core.ServerMessaging.Models +{ + public class Server + { + public Server(IServerInstance instance) + { + ServerName = instance.ServerName; + Secret = instance.Secret; + Code = instance.Code; + InstanceId = instance.InstanceId; + + GameState = instance.GameState; + BeatmapDifficultyMask = instance.BeatmapDifficultyMask; + GameplayModifiersMask = instance.GameplayModifiersMask; + GameplayServerConfiguration = instance.GameplayServerConfiguration; + SongPackMasks = instance.SongPackMasks; + + ManagerId = instance.ManagerId; + PermanentManager = instance.PermanentManager; + ServerStartJoinTimeout = instance.ServerStartJoinTimeout; + NeverCloseServer = instance.NeverCloseServer; + ResultScreenTime = instance.ResultScreenTime; + BeatmapStartTime = instance.BeatmapStartTime; + PlayersReadyCountdownTime = instance.PlayersReadyCountdownTime; + + AllowPerPlayerDifficulties = instance.AllowPerPlayerDifficulties; + AllowPerPlayerModifiers = instance.AllowPerPlayerModifiers; + AllowChroma = instance.AllowChroma; + AllowME = instance.AllowME; + AllowNE = instance.AllowNE; + } + public Server() { } + + public string ServerName { get; set; } = string.Empty; + public string Secret { get; set; } = string.Empty; + public string Code { get; set; } = string.Empty; + public string InstanceId { get; set; } = string.Empty; + + public MultiplayerGameState GameState { get; set; } + public BeatmapDifficultyMask BeatmapDifficultyMask { get; set; } + public GameplayModifiersMask GameplayModifiersMask { get; set; } + public GameplayServerConfiguration GameplayServerConfiguration { get; set; } = new(); + public string SongPackMasks { get; set; } = string.Empty; + + public string ManagerId { get; set; } = string.Empty; + public bool PermanentManager { get; set; } + public long ServerStartJoinTimeout { get; set; } + public bool NeverCloseServer { get; set; } + public long ResultScreenTime { get; set; } + public long BeatmapStartTime { get; set; } + public long PlayersReadyCountdownTime { get; set; } + public bool AllowPerPlayerModifiers { get; set; } + public bool AllowPerPlayerDifficulties { get; set; } + public bool AllowChroma { get; set; } + public bool AllowME { get ; set ; } + public bool AllowNE { get; set; } + } +} diff --git a/BeatTogether.Core.sln b/BeatTogether.Core.sln index 8dcd75f..985de35 100644 --- a/BeatTogether.Core.sln +++ b/BeatTogether.Core.sln @@ -11,6 +11,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dependencies", "dependencie EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AsyncUdpServer", "dependencies\AsyncUdpServer\AsyncUdpServer\AsyncUdpServer.csproj", "{B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeatTogether.Core", "BeatTogether.Core.ServerMessaging\BeatTogether.Core.csproj", "{1D3C46DC-6AD8-4A97-A1A0-E1D8390BB23D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -29,6 +31,10 @@ Global {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B41D53DD-7F1C-447F-9211-BC9A7A2C23E0}.Release|Any CPU.Build.0 = Release|Any CPU + {1D3C46DC-6AD8-4A97-A1A0-E1D8390BB23D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D3C46DC-6AD8-4A97-A1A0-E1D8390BB23D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D3C46DC-6AD8-4A97-A1A0-E1D8390BB23D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D3C46DC-6AD8-4A97-A1A0-E1D8390BB23D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 3d9a1188c8da6ac169ea8f355dc9b5058fdb039d Mon Sep 17 00:00:00 2001 From: cubic Date: Thu, 9 May 2024 21:03:23 +0100 Subject: [PATCH 11/14] Build new module --- .github/workflows/nuget.yml | 2 ++ .../BeatTogether.Core.csproj | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index 59b755a..b00c21b 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -24,6 +24,7 @@ jobs: run: | dotnet pack -c Release --output nupkgs BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj dotnet pack -c Release --output nupkgs BeatTogether.Core.Security/BeatTogether.Core.Security.csproj + dotnet pack -c Release --output nupkgs BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj - name: Publish run: | dotnet nuget push "nupkgs/BeatTogether.Core.*.nupkg" -k ${{secrets.GITHUB_TOKEN}} --skip-duplicate @@ -46,6 +47,7 @@ jobs: run: | dotnet pack -c Release --output nupkgs BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj dotnet pack -c Release --output nupkgs BeatTogether.Core.Security/BeatTogether.Core.Security.csproj + dotnet pack -c Release --output nupkgs BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj - name: Publish run: | dotnet nuget push "nupkgs/BeatTogether.Core.*.nupkg" -k ${{secrets.NUGET_API_KEY}} --skip-duplicate diff --git a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj index 210133b..6951ae8 100644 --- a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj +++ b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj @@ -2,14 +2,22 @@ net6.0 + 9 enable enable 1.0.3 + icon.png BeatTogether + BeatTogether + https://github.com/pythonology/BeatTogether.Core + + + + From 1a136b30010a98952d5e92418578ddb7fbb45047 Mon Sep 17 00:00:00 2001 From: cubic Date: Thu, 9 May 2024 21:04:51 +0100 Subject: [PATCH 12/14] Remove lang ver --- BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj index 6951ae8..79e65a5 100644 --- a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj +++ b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj @@ -2,7 +2,6 @@ net6.0 - 9 enable enable 1.0.3 From e3f8bb958e5e2728c18c0d318ac406258b592032 Mon Sep 17 00:00:00 2001 From: "Michael R." Date: Sun, 25 Aug 2024 11:51:56 +0200 Subject: [PATCH 13/14] Add Pico as platform --- BeatTogether.Core.ServerMessaging/Enums/Platform.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BeatTogether.Core.ServerMessaging/Enums/Platform.cs b/BeatTogether.Core.ServerMessaging/Enums/Platform.cs index d162cb1..43224da 100644 --- a/BeatTogether.Core.ServerMessaging/Enums/Platform.cs +++ b/BeatTogether.Core.ServerMessaging/Enums/Platform.cs @@ -12,6 +12,7 @@ public enum Platform : byte PS5, PS5Dev, PS5Cert, - Oculus = 1 + Oculus = 1, + Pico = 20, } -} \ No newline at end of file +} From 35e0e72e8ca928134a6613ed9fcdec28291afaf0 Mon Sep 17 00:00:00 2001 From: "Michael R." Date: Sun, 25 Aug 2024 12:18:22 +0200 Subject: [PATCH 14/14] Bumo BeatTogether.Core --- BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj index 79e65a5..5603ede 100644 --- a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj +++ b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj @@ -4,7 +4,7 @@ net6.0 enable enable - 1.0.3 + 1.1.0 icon.png BeatTogether BeatTogether