MatchmakerServer/Matchmaker/BaseServer/ServerSend.cs

277 lines
9 KiB
C#
Raw Permalink Normal View History

2023-01-15 13:26:28 -08:00
namespace Matchmaker.Server.BaseServer;
public static class ServerSend
{
public enum StatusType
{
OK,
RECEIVED,
FAIL
}
/// <summary>
/// Sends TCP data to a Client
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="packet">Data to send</param>
public static void SendTcpData(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var tcp = server.Clients[toClient].Tcp;
tcp?.SendData(packet);
}
/// <summary>
/// Sends UDP data to a Client
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="packet">Data to send</param>
// 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);
}
/// <summary>
/// Sends TCP data to all Clients
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends TCP data to all Clients except one
/// </summary>
/// <param name="server">Server the Client is in</param>
/// /// <param name="exceptClient">What Client to exclude</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends UDP data to all Clients
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends UDP data to all Clients except one
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="exceptClient">What Client to exclude</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends TCP data to a Client
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="packet">Data to send</param>
public static void SendTcpDataNoSync(Server server, int toClient, Packet packet)
{
packet.WriteLength();
var tcp = server.Clients[toClient].Tcp;
tcp?.SendData(packet);
}
/// <summary>
/// Sends UDP data to a Client
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="packet">Data to send</param>
// 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);
}
/// <summary>
/// Sends TCP data to all Clients
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends TCP data to all Clients except one
/// </summary>
/// <param name="server">Server the Client is in</param>
/// /// <param name="exceptClient">What Client to exclude</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends UDP data to all Clients
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="packet">Data to send</param>
// 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);
}
}
/// <summary>
/// Sends UDP data to all Clients except one
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="exceptClient">What Client to exclude</param>
/// <param name="packet">Data to send</param>
// 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
/// <summary>
/// Welcome message for Client
/// </summary>
/// <param name="server">Server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="msg">Message to send</param>
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);
}
/// <summary>
/// Disconnect a Client
/// </summary>
/// <param name="server">What server the Client is in</param>
/// <param name="toClient">What Client to kick</param>
public static void DisconnectClient(Server server, int toClient)
{
using var packet = new Packet(int.MaxValue-1);
SendTcpData(server, toClient, packet);
}
/// <summary>
/// Send an Attribute to the Client
/// </summary>
/// <param name="server">What server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="requestedId">What Client the Attribute is from</param>
/// <param name="name">The Attribute name</param>
/// <param name="value">The Attribute value</param>
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);
}
/// <summary>
/// Respond to the client with a status
/// </summary>
/// <param name="server">What server the Client is in</param>
/// <param name="toClient">ID for the recipient</param>
/// <param name="status">What status</param>
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
}