implement custom `SUE` command for handling api

This commit is contained in:
Alan Moon 2025-03-17 14:01:03 -07:00
parent b378ff2689
commit 13e9723626
4 changed files with 93 additions and 52 deletions

View File

@ -90,6 +90,7 @@ class LoginHandler : CommandHandler
} }
} catch (Exception ex) { } catch (Exception ex) {
Console.WriteLine($"Authentication exception IID: {client.ClientID} - {ex}"); Console.WriteLine($"Authentication exception IID: {client.ClientID} - {ex}");
Console.WriteLine("This Can Be Ignored If API Is The One Logging In.");
} }
return Configuration.ServerConfiguration.Authentication != AuthenticationMode.Required; // return true on auth err if not Required mode return Configuration.ServerConfiguration.Authentication != AuthenticationMode.Required; // return true on auth err if not Required mode
} }

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using sodoffmmo.Attributes;
using sodoffmmo.Core;
using sodoffmmo.Data;
namespace sodoffmmo.CommandHandlers
{
[ExtensionCommandHandler("SUE")]
public class SendUserEventHandler : CommandHandler
{
public override Task Handle(Client client, NetworkObject receivedObject)
{
NetworkObject p = receivedObject.Get<NetworkObject>("p");
string userId = p.Get<string>("UID");
string cmd = p.Get<string>("CMD");
string[] arr = p.Get<string[]>("ARR");
// find client in all clients list
Client? client1 = Server.AllClients.FirstOrDefault(e => e.PlayerData.Uid == userId);
// send command
if (client1 != null) client1.Send(Utils.ArrNetworkPacket(arr, cmd));
return Task.CompletedTask;
}
}
}

View File

@ -12,11 +12,14 @@ public class Server {
readonly IPAddress ipAddress; readonly IPAddress ipAddress;
readonly bool IPv6AndIPv4; readonly bool IPv6AndIPv4;
ModuleManager moduleManager = new(); ModuleManager moduleManager = new();
public static List<Client> AllClients { get; private set; }
public Server(IPAddress ipAdress, int port, bool IPv6AndIPv4) { public Server(IPAddress ipAdress, int port, bool IPv6AndIPv4) {
this.ipAddress = ipAdress; this.ipAddress = ipAdress;
this.port = port; this.port = port;
this.IPv6AndIPv4 = IPv6AndIPv4; this.IPv6AndIPv4 = IPv6AndIPv4;
AllClients = new List<Client>();
} }
public async Task Run() { public async Task Run() {
@ -47,6 +50,7 @@ public class Server {
private async Task HandleClient(Socket handler) { private async Task HandleClient(Socket handler) {
Client client = new(handler); Client client = new(handler);
AllClients.Add(client);
try { try {
while (client.Connected) { while (client.Connected) {
await client.Receive(); await client.Receive();
@ -59,6 +63,7 @@ public class Server {
} finally { } finally {
try { try {
client.SetRoom(null); client.SetRoom(null);
AllClients.Remove(client);
} catch (Exception) { } } catch (Exception) { }
client.Disconnect(); client.Disconnect();
Console.WriteLine("Socket disconnected IID: " + client.ClientID); Console.WriteLine("Socket disconnected IID: " + client.ClientID);

View File

@ -26,10 +26,13 @@
"// alert types": "1 - Red Alert, 2 - Disco Alert, 3 - Dance Off", "// alert types": "1 - Red Alert, 2 - Disco Alert, 3 - Dance Off",
"RoomAlerts": { "RoomAlerts": {
"LoungeInt": [ [ "3", 20.0, 30, 240, 0, 16 ] ], "LoungeInt": [ [ "3", 20.0, 30, 240, 0, 16 ] ],
"Spaceport": [ ["1", 20.0, 300, 300, 60, 0], ["2", 120.0, 1800, 3600, 60, 0] ], "Spaceport": [
[ "1", 20.0, 300, 300, 60, 0 ],
[ "2", 120.0, 1800, 3600, 60, 0 ]
],
"Academy": [ [ "1", 20.0, 300, 300, 60, 0 ] ], "Academy": [ [ "1", 20.0, 300, 300, 60, 0 ] ],
"ClubSSInt": [ [ "3", 20.0, 30, 240, 0, 16 ] ], "ClubSSInt": [ [ "3", 20.0, 30, 240, 0, 16 ] ],
"JunkYardEMD": [ ["1", 20.0, 240, 300, 60, 0] ], "JunkYardEMD": [ [ "1", 20.0, 240, 300, 60, 0 ] ]
}, },
"// AmbassadorRooms": "Rooms with ambassadors (MB funzones).", "// AmbassadorRooms": "Rooms with ambassadors (MB funzones).",
@ -61,7 +64,7 @@
"// Authentication Optional": "authentication is required only for moderation activities", "// Authentication Optional": "authentication is required only for moderation activities",
"// Authentication RequiredForChat": "authentication is required only for moderation activities and using chat (if chat is enabled)", "// Authentication RequiredForChat": "authentication is required only for moderation activities and using chat (if chat is enabled)",
"// Authentication Required": "authentication is required to connect to mmo", "// Authentication Required": "authentication is required to connect to mmo",
"Authentication": "Required", "Authentication": "RequiredForChat",
"// ApiUrl": "SoDOff API server URL for authentication calls and other calls", "// ApiUrl": "SoDOff API server URL for authentication calls and other calls",
"ApiUrl": "http://localhost:5000", "ApiUrl": "http://localhost:5000",