non blocking implementation

This commit is contained in:
MrOkiDoki 2023-08-11 13:05:13 +03:00
parent b2d2872495
commit 40fa8aa623
12 changed files with 40 additions and 126 deletions

View File

@ -34,16 +34,14 @@ namespace BattleBitAPI.Server
// --- Private --- // --- Private ---
private TcpListener mSocket; private TcpListener mSocket;
private bool mIsBlocking;
private Dictionary<ulong, (TGameServer server, GameServer<TPlayer>.Internal resources)> mActiveConnections; private Dictionary<ulong, (TGameServer server, GameServer<TPlayer>.Internal resources)> mActiveConnections;
private mInstances<TPlayer, TGameServer> mInstanceDatabase; private mInstances<TPlayer, TGameServer> mInstanceDatabase;
// --- Construction --- // --- Construction ---
public ServerListener(bool isBlocking = true) public ServerListener()
{ {
this.mActiveConnections = new Dictionary<ulong, (TGameServer, GameServer<TPlayer>.Internal)>(16); this.mActiveConnections = new Dictionary<ulong, (TGameServer, GameServer<TPlayer>.Internal)>(16);
this.mInstanceDatabase = new mInstances<TPlayer, TGameServer>(); this.mInstanceDatabase = new mInstances<TPlayer, TGameServer>();
this.mIsBlocking = isBlocking;
} }
// --- Starting --- // --- Starting ---
@ -546,9 +544,6 @@ namespace BattleBitAPI.Server
{ {
while (server.IsConnected) while (server.IsConnected)
{ {
if (this.mIsBlocking)
await server.OnTick();
else
server.OnTick(); server.OnTick();
await server.Tick(); await server.Tick();
@ -594,18 +589,10 @@ namespace BattleBitAPI.Server
player.Role = role; player.Role = role;
resources.AddPlayer(player); resources.AddPlayer(player);
if (this.mIsBlocking)
{
await server.OnPlayerConnected(player);
await player.OnConnected();
}
else
{
server.OnPlayerConnected(player); server.OnPlayerConnected(player);
player.OnConnected(); player.OnConnected();
} }
} }
}
break; break;
} }
case NetworkCommuncation.PlayerDisconnected: case NetworkCommuncation.PlayerDisconnected:
@ -619,19 +606,11 @@ namespace BattleBitAPI.Server
exist = resources.Players.Remove(steamID, out player); exist = resources.Players.Remove(steamID, out player);
if (exist) if (exist)
{
if (this.mIsBlocking)
{
await server.OnPlayerDisconnected((TPlayer)player);
await player.OnDisconnected();
}
else
{ {
server.OnPlayerDisconnected((TPlayer)player); server.OnPlayerDisconnected((TPlayer)player);
player.OnDisconnected(); player.OnDisconnected();
} }
} }
}
break; break;
} }
case NetworkCommuncation.OnPlayerTypedMessage: case NetworkCommuncation.OnPlayerTypedMessage:
@ -645,6 +624,8 @@ namespace BattleBitAPI.Server
{ {
ChatChannel chat = (ChatChannel)stream.ReadInt8(); ChatChannel chat = (ChatChannel)stream.ReadInt8();
if (stream.TryReadString(out var msg)) if (stream.TryReadString(out var msg))
{
async Task Handle()
{ {
var pass = await server.OnPlayerTypedMessage((TPlayer)player, chat, msg); var pass = await server.OnPlayerTypedMessage((TPlayer)player, chat, msg);
@ -657,6 +638,10 @@ namespace BattleBitAPI.Server
server.WriteToSocket(response); server.WriteToSocket(response);
} }
} }
Handle();
}
} }
} }
break; break;
@ -691,9 +676,6 @@ namespace BattleBitAPI.Server
KillerTool = tool, KillerTool = tool,
}; };
if (this.mIsBlocking)
await server.OnAPlayerKilledAnotherPlayer(args);
else
server.OnAPlayerKilledAnotherPlayer(args); server.OnAPlayerKilledAnotherPlayer(args);
} }
} }
@ -722,9 +704,6 @@ namespace BattleBitAPI.Server
} }
} }
if (mIsBlocking)
await mHandle();
else
mHandle(); mHandle();
} }
break; break;
@ -737,9 +716,6 @@ namespace BattleBitAPI.Server
PlayerStats stats = new PlayerStats(); PlayerStats stats = new PlayerStats();
stats.Read(stream); stats.Read(stream);
if (mIsBlocking)
await server.OnSavePlayerStats(steamID, stats);
else
server.OnSavePlayerStats(steamID, stats); server.OnSavePlayerStats(steamID, stats);
} }
break; break;
@ -760,9 +736,6 @@ namespace BattleBitAPI.Server
server.SetRoleTo(steamID, role); server.SetRoleTo(steamID, role);
} }
if (mIsBlocking)
await mHandle();
else
mHandle(); mHandle();
} }
} }
@ -778,9 +751,6 @@ namespace BattleBitAPI.Server
if (resources.TryGetPlayer(steamID, out var client)) if (resources.TryGetPlayer(steamID, out var client))
{ {
client.Role = role; client.Role = role;
if (mIsBlocking)
await server.OnPlayerChangedRole((TPlayer)client, role);
else
server.OnPlayerChangedRole((TPlayer)client, role); server.OnPlayerChangedRole((TPlayer)client, role);
} }
} }
@ -796,9 +766,6 @@ namespace BattleBitAPI.Server
if (resources.TryGetPlayer(steamID, out var client)) if (resources.TryGetPlayer(steamID, out var client))
{ {
client.Squad = squad; client.Squad = squad;
if (mIsBlocking)
await server.OnPlayerJoinedSquad((TPlayer)client, squad);
else
server.OnPlayerJoinedSquad((TPlayer)client, squad); server.OnPlayerJoinedSquad((TPlayer)client, squad);
} }
} }
@ -817,20 +784,11 @@ namespace BattleBitAPI.Server
client.Squad = Squads.NoSquad; client.Squad = Squads.NoSquad;
client.Role = GameRole.Assault; client.Role = GameRole.Assault;
if (mIsBlocking)
{
await server.OnPlayerLeftSquad((TPlayer)client, oldSquad);
if (oldRole != GameRole.Assault)
await server.OnPlayerChangedRole((TPlayer)client, GameRole.Assault);
}
else
{
server.OnPlayerLeftSquad((TPlayer)client, oldSquad); server.OnPlayerLeftSquad((TPlayer)client, oldSquad);
if (oldRole != GameRole.Assault) if (oldRole != GameRole.Assault)
server.OnPlayerChangedRole((TPlayer)client, GameRole.Assault); server.OnPlayerChangedRole((TPlayer)client, GameRole.Assault);
} }
} }
}
break; break;
} }
case NetworkCommuncation.OnPlayerChangedTeam: case NetworkCommuncation.OnPlayerChangedTeam:
@ -843,9 +801,6 @@ namespace BattleBitAPI.Server
if (resources.TryGetPlayer(steamID, out var client)) if (resources.TryGetPlayer(steamID, out var client))
{ {
client.Team = team; client.Team = team;
if (mIsBlocking)
await server.OnPlayerChangeTeam((TPlayer)client, team);
else
server.OnPlayerChangeTeam((TPlayer)client, team); server.OnPlayerChangeTeam((TPlayer)client, team);
} }
} }
@ -878,9 +833,6 @@ namespace BattleBitAPI.Server
} }
} }
if (mIsBlocking)
await mHandle();
else
mHandle(); mHandle();
} }
} }
@ -899,9 +851,6 @@ namespace BattleBitAPI.Server
{ {
if (resources.TryGetPlayer(reported, out var reportedClient)) if (resources.TryGetPlayer(reported, out var reportedClient))
{ {
if (mIsBlocking)
await server.OnPlayerReported((TPlayer)reporterClient, (TPlayer)reportedClient, reason, additionalInfo);
else
server.OnPlayerReported((TPlayer)reporterClient, (TPlayer)reportedClient, reason, additionalInfo); server.OnPlayerReported((TPlayer)reporterClient, (TPlayer)reportedClient, reason, additionalInfo);
} }
} }
@ -925,18 +874,10 @@ namespace BattleBitAPI.Server
client.IsAlive = true; client.IsAlive = true;
if (mIsBlocking)
{
await client.OnSpawned();
await server.OnPlayerSpawned((TPlayer)client);
}
else
{
client.OnSpawned(); client.OnSpawned();
server.OnPlayerSpawned((TPlayer)client); server.OnPlayerSpawned((TPlayer)client);
} }
} }
}
break; break;
} }
case NetworkCommuncation.OnPlayerDie: case NetworkCommuncation.OnPlayerDie:
@ -950,18 +891,10 @@ namespace BattleBitAPI.Server
client.CurrentWearings = new PlayerWearings(); client.CurrentWearings = new PlayerWearings();
client.IsAlive = false; client.IsAlive = false;
if (mIsBlocking)
{
await client.OnDied();
await server.OnPlayerDied((TPlayer)client);
}
else
{
client.OnDied(); client.OnDied();
server.OnPlayerDied((TPlayer)client); server.OnPlayerDied((TPlayer)client);
} }
} }
}
break; break;
} }
case NetworkCommuncation.NotifyNewMapRotation: case NetworkCommuncation.NotifyNewMapRotation:

View File

@ -8,38 +8,19 @@ class Program
static void Main(string[] args) static void Main(string[] args)
{ {
var listener = new ServerListener<MyPlayer, MyGameServer>(); var listener = new ServerListener<MyPlayer, MyGameServer>();
listener.OnGameServerConnecting += OnGameServerConnecting;
listener.Start(29294); listener.Start(29294);
Thread.Sleep(-1); Thread.Sleep(-1);
} }
private static async Task<bool> OnGameServerConnecting(IPAddress ip)
{
return true;
}
} }
class MyPlayer : Player<MyPlayer> class MyPlayer : Player<MyPlayer>
{ {
public override async Task OnSpawned()
{
}
} }
class MyGameServer : GameServer<MyPlayer> class MyGameServer : GameServer<MyPlayer>
{ {
public override async Task OnConnected()
{
Console.WriteLine(base.GameIP + " connected");
}
public override async Task OnTick()
{
}
public override async Task<bool> OnPlayerTypedMessage(MyPlayer player, ChatChannel channel, string msg) public override async Task<bool> OnPlayerTypedMessage(MyPlayer player, ChatChannel channel, string msg)
{ {
return true;
} }
} }

View File

@ -1 +1 @@
8f0a13b55a78de27b4bd6f14afc4adfc26b55b80 41f5fea171d475c9035f62dd63d760ea2e513193