2022-01-12 11:20:33 +08:00
|
|
|
<?php
|
|
|
|
|
|
2022-01-12 11:29:50 +08:00
|
|
|
namespace Kiri\Server\Broadcast;
|
2022-01-12 11:20:33 +08:00
|
|
|
|
2022-01-12 14:10:32 +08:00
|
|
|
use Kiri;
|
2022-06-16 17:38:22 +08:00
|
|
|
use Kiri\Server\ServerInterface;
|
2022-06-16 17:49:06 +08:00
|
|
|
use Kiri\Server\Abstracts\ProcessManager;
|
2023-04-21 22:26:43 +08:00
|
|
|
use ReflectionException;
|
2022-01-12 11:20:33 +08:00
|
|
|
|
|
|
|
|
class Broadcast
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $message
|
|
|
|
|
* @return void
|
2023-04-21 22:26:43 +08:00
|
|
|
* @throws ReflectionException
|
2022-01-12 11:20:33 +08:00
|
|
|
*/
|
2023-02-13 11:50:27 +08:00
|
|
|
public function broadcast($message): void
|
2022-01-12 11:20:33 +08:00
|
|
|
{
|
|
|
|
|
$di = Kiri::getDi();
|
2023-02-13 11:50:27 +08:00
|
|
|
$message = serialize(new Message($message));
|
|
|
|
|
|
|
|
|
|
$processes = $di->get(ProcessManager::class)->getProcesses();
|
|
|
|
|
foreach ($processes as $process) {
|
|
|
|
|
$process->write($message);
|
|
|
|
|
}
|
2022-01-12 11:20:33 +08:00
|
|
|
|
2022-06-16 17:38:22 +08:00
|
|
|
$server = $di->get(ServerInterface::class);
|
2022-01-12 11:20:33 +08:00
|
|
|
|
|
|
|
|
$total = $server->setting['worker_num'] + $server->setting['task_worker_num'];
|
|
|
|
|
for ($i = 0; $i < $total; $i++) {
|
2022-01-12 11:39:16 +08:00
|
|
|
if ($i == env('environmental_workerId')) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2023-02-13 11:50:27 +08:00
|
|
|
$server->sendMessage($message, $i);
|
2022-01-12 11:20:33 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|