277 lines
No EOL
9 KiB
C#
Executable file
277 lines
No EOL
9 KiB
C#
Executable file
|
|
|
|
|
|
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
|
|
} |