Chat message will wait for a callback.

This commit is contained in:
MrOkiDoki 2023-08-10 13:31:19 +03:00
parent ec935486de
commit d080cf110c
18 changed files with 44 additions and 16 deletions

View file

@ -11,6 +11,7 @@
SendPlayerStats = 11, SendPlayerStats = 11,
SpawnPlayer = 12, SpawnPlayer = 12,
SetNewRoomSettings = 13, SetNewRoomSettings = 13,
RespondPlayerMessage = 14,
PlayerConnected = 50, PlayerConnected = 50,
PlayerDisconnected = 51, PlayerDisconnected = 51,

View file

@ -14,10 +14,10 @@ namespace BattleBitAPI.Server
// ---- Public Variables ---- // ---- Public Variables ----
public TcpClient Socket { get; private set; } public TcpClient Socket { get; private set; }
public ulong ServerHash { get; private set; }
/// <summary> /// <summary>
/// Is game server connected to our server? /// Is game server connected to our server?
/// </summary> /// </summary>
public ulong ServerHash { get; private set; }
public bool IsConnected { get; private set; } public bool IsConnected { get; private set; }
public IPAddress GameIP { get; private set; } public IPAddress GameIP { get; private set; }
public int GamePort { get; private set; } public int GamePort { get; private set; }
@ -54,7 +54,7 @@ namespace BattleBitAPI.Server
private mInternalResources mInternal; private mInternalResources mInternal;
private StringBuilder mBuilder; private StringBuilder mBuilder;
// ---- Constrction ---- // ---- Construction ----
public GameServer(TcpClient socket, mInternalResources resources, Func<GameServer, mInternalResources, Common.Serialization.Stream, Task> func, IPAddress iP, int port, bool isPasswordProtected, string serverName, string gamemode, string map, MapSize mapSize, MapDayNight dayNight, int currentPlayers, int inQueuePlayers, int maxPlayers, string loadingScreenText, string serverRulesText) public GameServer(TcpClient socket, mInternalResources resources, Func<GameServer, mInternalResources, Common.Serialization.Stream, Task> func, IPAddress iP, int port, bool isPasswordProtected, string serverName, string gamemode, string map, MapSize mapSize, MapDayNight dayNight, int currentPlayers, int inQueuePlayers, int maxPlayers, string loadingScreenText, string serverRulesText)
{ {
this.IsConnected = true; this.IsConnected = true;

View file

@ -92,7 +92,10 @@ namespace BattleBitAPI.Server
/// ChatChannel: The channel the message was sent <br/> /// ChatChannel: The channel the message was sent <br/>
/// string - Message: The message<br/> /// string - Message: The message<br/>
/// </remarks> /// </remarks>
public Func<TPlayer, ChatChannel, string, Task> OnPlayerTypedMessage { get; set; } /// <value>
/// Returns: True if you let the message broadcasted, false if you don't it to be broadcasted.
/// </value>
public Func<TPlayer, ChatChannel, string, Task<bool>> OnPlayerTypedMessage { get; set; }
/// <summary> /// <summary>
/// Fired when a player kills another player. /// Fired when a player kills another player.
@ -794,8 +797,9 @@ namespace BattleBitAPI.Server
} }
case NetworkCommuncation.OnPlayerTypedMessage: case NetworkCommuncation.OnPlayerTypedMessage:
{ {
if (stream.CanRead(8 + 1 + 2)) if (stream.CanRead(2 + 8 + 1 + 2))
{ {
ushort messageID = stream.ReadUInt16();
ulong steamID = stream.ReadUInt64(); ulong steamID = stream.ReadUInt64();
if (resources.TryGetPlayer(steamID, out var player)) if (resources.TryGetPlayer(steamID, out var player))
@ -803,8 +807,18 @@ 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))
{ {
bool pass = true;
if (OnPlayerTypedMessage != null) if (OnPlayerTypedMessage != null)
await OnPlayerTypedMessage.Invoke((TPlayer)player, chat, msg); pass = await OnPlayerTypedMessage.Invoke((TPlayer)player, chat, msg);
//Respond back.
using (var response = Common.Serialization.Stream.Get())
{
response.Write((byte)NetworkCommuncation.RespondPlayerMessage);
response.Write(messageID);
response.Write(pass);
server.WriteToSocket(response);
}
} }
} }
} }

View file

@ -1,7 +1,9 @@
using BattleBitAPI; using BattleBitAPI;
using BattleBitAPI.Common; using BattleBitAPI.Common;
using BattleBitAPI.Server; using BattleBitAPI.Server;
using BattleBitAPI.Storage; using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
using System.Numerics; using System.Numerics;
class Program class Program
@ -9,21 +11,32 @@ class Program
static void Main(string[] args) static void Main(string[] args)
{ {
var listener = new ServerListener<MyPlayer>(); var listener = new ServerListener<MyPlayer>();
listener.OnGameServerTick += OnGameServerTick; listener.Start(29294);
listener.Start(29294);//Port
listener.OnPlayerTypedMessage += OnPlayerTypedMessage;
Thread.Sleep(-1); Thread.Sleep(-1);
} }
private static async Task OnGameServerTick(GameServer server) private static async Task<bool> OnPlayerTypedMessage(MyPlayer player, ChatChannel ch, string msg)
{ {
//server.Settings.SpectatorEnabled = !server.Settings.SpectatorEnabled; if (msg == "nword")
//server.MapRotation.AddToRotation("DustyDew"); {
//server.MapRotation.AddToRotation("District"); player.NumberOfNWord++;
//server.GamemodeRotation.AddToRotation("CONQ"); if (player.NumberOfNWord > 4)
//server.ForceEndGame(); {
player.Kick("N word is not accepted!");
}
else
{
player.Message("Do not type nword, this is your " + player.NumberOfNWord + "th warning");
}
return false;
}
return true;
} }
} }
class MyPlayer : Player class MyPlayer : Player
{ {
public int NumberOfNWord;
} }