mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-24 03:57:27 +08:00
feat: machine mode, ECH subscriptions, batch ops & security hardening
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\Server;
|
||||
use App\Models\ServerMachine;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
@@ -30,7 +31,6 @@ class NodeSyncService
|
||||
if (!$node)
|
||||
return;
|
||||
|
||||
|
||||
self::push($nodeId, 'sync.config', ['config' => ServerService::buildNodeConfig($node)]);
|
||||
}
|
||||
|
||||
@@ -122,6 +122,28 @@ class NodeSyncService
|
||||
self::push($nodeId, 'sync.users', ['users' => $users]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify machine that its node set has changed.
|
||||
* Always publishes via Redis so the WS process can update its in-memory registry.
|
||||
*/
|
||||
public static function notifyMachineNodesChanged(int $machineId): void
|
||||
{
|
||||
$machine = ServerMachine::find($machineId);
|
||||
|
||||
$nodeList = [];
|
||||
if ($machine) {
|
||||
$nodes = ServerService::getMachineNodes($machine);
|
||||
$nodeList = $nodes->map(fn($n) => [
|
||||
'id' => $n->id,
|
||||
'type' => $n->type,
|
||||
'name' => $n->name,
|
||||
])->values()->toArray();
|
||||
}
|
||||
|
||||
// Always publish via Redis so the WS process can update its in-memory registry
|
||||
self::pushMachine($machineId, 'sync.nodes', ['nodes' => $nodeList]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a push command to Redis — picked up by the Workerman WS server
|
||||
*/
|
||||
@@ -140,4 +162,23 @@ class NodeSyncService
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a machine-level push command to Redis — picked up by the Workerman WS server
|
||||
*/
|
||||
public static function pushMachine(int $machineId, string $event, array $data): void
|
||||
{
|
||||
try {
|
||||
Redis::publish('node:push', json_encode([
|
||||
'machine_id' => $machineId,
|
||||
'event' => $event,
|
||||
'data' => $data,
|
||||
]));
|
||||
} catch (\Throwable $e) {
|
||||
Log::warning("[NodePush] Redis machine publish failed: {$e->getMessage()}", [
|
||||
'machine_id' => $machineId,
|
||||
'event' => $event,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user