non blocking implementation
This commit is contained in:
parent
b2d2872495
commit
40fa8aa623
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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:
|
||||||
|
|
25
Program.cs
25
Program.cs
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
||||||
8f0a13b55a78de27b4bd6f14afc4adfc26b55b80
|
41f5fea171d475c9035f62dd63d760ea2e513193
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue