namespace Matchmaker.Server.BaseServer;
public static class ServerSend
{
public enum StatusType
{
OK,
RECEIVED,
FAIL
}
///
/// Sends TCP data to a Client
///
/// Server the Client is in
/// ID for the recipient
/// Data to send
public static void SendTcpData(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var tcp = server.Clients[toClient].Tcp;
tcp?.SendData(packet);
}
///
/// Sends UDP data to a Client
///
/// Server the Client is in
/// ID for the recipient
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpData(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var udp = server.Clients[toClient].Udp;
udp.SendData(packet);
}
///
/// Sends TCP data to all Clients
///
/// Server the Client is in
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendTcpDataToAll(Server server, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
var tcp = server.Clients[i].Tcp;
tcp?.SendData(packet);
}
}
///
/// Sends TCP data to all Clients except one
///
/// Server the Client is in
/// /// What Client to exclude
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendTcpDataToAll(Server server, int exceptClient, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
if (i == exceptClient) continue;
var tcp = server.Clients[i].Tcp;
tcp?.SendData(packet);
}
}
///
/// Sends UDP data to all Clients
///
/// Server the Client is in
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpDataToAll(Server server, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
var udp = server.Clients[i].Udp;
udp.SendData(packet);
}
}
///
/// Sends UDP data to all Clients except one
///
/// Server the Client is in
/// What Client to exclude
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpDataToAll(Server server, int exceptClient, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
if (i == exceptClient) continue;
var udp = server.Clients[i].Udp;
udp.SendData(packet);
}
}
///
/// Sends TCP data to a Client
///
/// Server the Client is in
/// ID for the recipient
/// Data to send
public static void SendTcpDataNoSync(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var tcp = server.Clients[toClient].Tcp;
tcp?.SendData(packet);
}
///
/// Sends UDP data to a Client
///
/// Server the Client is in
/// ID for the recipient
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpDataNoSync(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var udp = server.Clients[toClient].Udp;
udp.SendData(packet);
}
///
/// Sends TCP data to all Clients
///
/// Server the Client is in
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendTcpDataToAllNoSync(Server server, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
var tcp = server.Clients[i].Tcp;
tcp?.SendData(packet);
}
}
///
/// Sends TCP data to all Clients except one
///
/// Server the Client is in
/// /// What Client to exclude
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendTcpDataToAllNoSync(Server server, int exceptClient, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
if (i == exceptClient) continue;
var tcp = server.Clients[i].Tcp;
tcp?.SendData(packet);
}
}
///
/// Sends UDP data to all Clients
///
/// Server the Client is in
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpDataToAllNoSync(Server server, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
var udp = server.Clients[i].Udp;
udp.SendData(packet);
}
}
///
/// Sends UDP data to all Clients except one
///
/// Server the Client is in
/// What Client to exclude
/// Data to send
// ReSharper disable once UnusedMember.Global
public static void SendUdpDataToAllNoSync(Server server, int exceptClient, Packet packet)
{
packet.WriteLength();
for (var i = 1; i <= server.MaxPlayers; i++)
{
if (i == exceptClient) continue;
var udp = server.Clients[i].Udp;
udp.SendData(packet);
}
}
#region Built-in Packets
///
/// Welcome message for Client
///
/// Server the Client is in
/// ID for the recipient
/// Message to send
public static void Welcome(Server server, int toClient, string msg)
{
Terminal.LogDebug($"[{server.DisplayName}] Sending 'Welcome' message.");
using var packet = new Packet(int.MaxValue);
packet.Write(msg);
packet.Write(toClient);
packet.Write(Config.MatchmakerAPIVersion);
packet.Write(Config.GameId);
packet.Write(Config.GameVersion);
SendTcpData(server, toClient, packet);
}
///
/// Disconnect a Client
///
/// What server the Client is in
/// What Client to kick
public static void DisconnectClient(Server server, int toClient)
{
using var packet = new Packet(int.MaxValue-1);
SendTcpData(server, toClient, packet);
}
///
/// Send an Attribute to the Client
///
/// What server the Client is in
/// ID for the recipient
/// What Client the Attribute is from
/// The Attribute name
/// The Attribute value
public static void GetClientAttributesReceived(BaseServer.Server server, int toClient, int requestedId, string name, string value)
{
using var packet = new Packet(int.MaxValue-2);
packet.Write(requestedId);
packet.Write(name);
packet.Write(value);
ServerSend.SendTcpData(server, toClient, packet);
}
///
/// Respond to the client with a status
///
/// What server the Client is in
/// ID for the recipient
/// What status
public static void Status(BaseServer.Server server, int toClient, StatusType status)
{
Terminal.LogDebug($"[{server.DisplayName}] Sending status {status}...");
using var packet = new Packet(int.MaxValue-3);
packet.Write((int)status);
ServerSend.SendUdpDataNoSync(server, toClient, packet);
}
#endregion
}