Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .github/workflows/nuget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ on:
push:
branches:
- master
- Net6.0

jobs:
nuget-1:
Expand All @@ -15,14 +16,15 @@ 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}}
- name: Pack
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
Expand All @@ -37,14 +39,15 @@ 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}}
- name: Pack
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
6 changes: 3 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -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
14 changes: 7 additions & 7 deletions BeatTogether.Core.Messaging/BeatTogether.Core.Messaging.csproj
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>9</LangVersion>
<PackageIcon>icon.png</PackageIcon>
<Authors>pythonology</Authors>
<Company>pythonology</Company>
<RepositoryUrl>https://github.com/pythonology/BeatTogether.Core</RepositoryUrl>
<Version>1.10.0</Version>
<Version>1.2.0</Version>
<Nullable>enable</Nullable>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
Expand All @@ -17,15 +17,15 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="BeatTogether.Extensions.Configuration" Version="1.0.0" />
<PackageReference Include="Krypton.Buffers" Version="2.0.2" />
<PackageReference Include="Serilog" Version="2.10.0" />
<PackageReference Include="BeatTogether.Extensions.Configuration" Version="1.1.0" />
<PackageReference Include="Krypton.Buffers" Version="2.0.3" />
<PackageReference Include="Serilog" Version="2.12.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\dependencies\NetCoreServer\source\NetCoreServer\NetCoreServer.csproj">
<ProjectReference Include="..\dependencies\AsyncUdpServer\AsyncUdpServer\AsyncUdpServer.csproj">
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<IncludeAssets>NetCoreServer.dll</IncludeAssets>
<IncludeAssets>AsyncUdpServer.dll</IncludeAssets>
</ProjectReference>
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
22 changes: 7 additions & 15 deletions BeatTogether.Core.Messaging/Implementations/BaseUdpClient.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
using System;
using System.Net;
using System.Net.Sockets;
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; }

Expand All @@ -22,7 +20,7 @@ public BaseUdpClient(
IPEndPoint endPoint,
IMessageSource messageSource,
IMessageDispatcher messageDispatcher)
: base(endPoint)
: base(endPoint, false, 1)
{
Session = GetSession(endPoint);

Expand Down Expand Up @@ -66,23 +64,17 @@ public BaseUdpClient(

#region Protected Methods

protected override void OnConnected() => ReceiveAsync();

protected override void OnReceived(EndPoint endPoint, ReadOnlySpan<byte> buffer)
protected override void OnReceived(EndPoint endpoint, Memory<byte> 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) =>
_logger.Error($"Handling OnError (Error={error}).");

#endregion
}
}
22 changes: 8 additions & 14 deletions BeatTogether.Core.Messaging/Implementations/BaseUdpServer.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
using System;
using System.Net;
using System.Net.Sockets;
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;
Expand All @@ -19,20 +18,21 @@ public BaseUdpServer(
IPEndPoint endPoint,
IMessageSource messageSource,
IMessageDispatcher messageDispatcher)
: base(endPoint)
: base(endPoint, false, 0)
{
_messageSource = messageSource;
_messageDispatcher = messageDispatcher;
_logger = Log.ForContext<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);
};
_messageSource.Subscribe<AcknowledgeMessage>((session, message) =>
{
Expand All @@ -59,9 +59,7 @@ public BaseUdpServer(

#region Protected Methods

protected override void OnStarted() => ReceiveAsync();

protected override void OnReceived(EndPoint endPoint, ReadOnlySpan<byte> buffer)
protected override void OnReceived(EndPoint endPoint, Memory<byte> buffer)
{
_logger.Verbose(
"Handling OnReceived " +
Expand All @@ -71,14 +69,10 @@ protected override void OnReceived(EndPoint endPoint, ReadOnlySpan<byte> 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) =>
_logger.Error($"Handling OnError (Error={error}).");

#endregion
}
}
10 changes: 5 additions & 5 deletions BeatTogether.Core.Security/BeatTogether.Core.Security.csproj
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<LangVersion>9</LangVersion>
<PackageIcon>icon.png</PackageIcon>
<Authors>pythonology</Authors>
<Company>pythonology</Company>
<RepositoryUrl>https://github.com/pythonology/BeatTogether.Core</RepositoryUrl>
<Version>1.1.0</Version>
<Version>1.2.0</Version>
<Nullable>enable</Nullable>
</PropertyGroup>

Expand All @@ -16,8 +16,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="BeatTogether.Extensions.Configuration" Version="1.0.0" />
<PackageReference Include="BouncyCastle.NetCore" Version="1.8.8" />
<PackageReference Include="BeatTogether.Extensions.Configuration" Version="1.1.0" />
<PackageReference Include="BouncyCastle.NetCore" Version="1.9.0" />
</ItemGroup>

</Project>
21 changes: 21 additions & 0 deletions BeatTogether.Core.ServerMessaging/Abstractions/ILayer1.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
29 changes: 29 additions & 0 deletions BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs
Original file line number Diff line number Diff line change
@@ -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<bool> CreateInstance(IServerInstance serverInstance);
public Task CloseInstance(string InstanceSecret);
public Task<bool> SetPlayerSessionData(string InstanceSecret, IPlayer playerSessionData);
public Task DisconnectPlayer(string InstanceSecret, string PlayerUserId);

public Task<IServerInstance?> GetServer(string secret);
public Task<IServerInstance?> GetServerByCode(string code);
public Task<IServerInstance?> GetAvailablePublicServer(
InvitePolicy invitePolicy,
GameplayServerMode serverMode,
SongSelectionMode songMode,
GameplayServerControlSettings serverControlSettings,
BeatmapDifficultyMask difficultyMask,
GameplayModifiersMask modifiersMask,
string songPackMasks);
}
}
14 changes: 14 additions & 0 deletions BeatTogether.Core.ServerMessaging/Abstractions/IPlayer.cs
Original file line number Diff line number Diff line change
@@ -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; }
}

}
34 changes: 34 additions & 0 deletions BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs
Original file line number Diff line number Diff line change
@@ -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<string> 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; }
}

}
22 changes: 22 additions & 0 deletions BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>1.1.0</Version>
<PackageIcon>icon.png</PackageIcon>
<Authors>BeatTogether</Authors>
<Company>BeatTogether</Company>
<RepositoryUrl>https://github.com/pythonology/BeatTogether.Core</RepositoryUrl>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BinaryRecords" Version="0.4.1" />
</ItemGroup>

<ItemGroup>
<Content Include="../icon.png" PackagePath="" Visible="false" />
</ItemGroup>

</Project>
14 changes: 14 additions & 0 deletions BeatTogether.Core.ServerMessaging/Enums/BeatmapDifficultyMask.cs
Original file line number Diff line number Diff line change
@@ -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
}
}
10 changes: 10 additions & 0 deletions BeatTogether.Core.ServerMessaging/Enums/CountdownState.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace BeatTogether.Core.Enums
{
public enum CountdownState : byte
{
NotCountingDown = 0,
CountingDown = 1,
StartBeatmapCountdown = 2,
WaitingForEntitlement = 3
}
}
Loading
Loading