Files
account/app/Events/WorkermanEvent.php
2026-01-18 09:52:48 +08:00

104 lines
2.7 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace App\Events;
use GatewayWorker\BusinessWorker;
use GatewayWorker\Lib\Gateway;
use Illuminate\Support\Facades\Log;
use Workerman\Lib\Timer;
class WorkermanEvent {
/**
* @title worker 启动时触发
*
* @param BusinessWorker $businessWorker
* @return void
*/
public static function onWorkerStart(BusinessWorker $businessWorker) {
self::log(__FUNCTION__, $businessWorker->workerId);
// 向所有客户端连接发送数据
// Gateway::sendToAll("worker started");
// 定时向所有客户端连接发送数据
Timer::add(1, function() use ($businessWorker) {
$time_now = time();
foreach ($businessWorker->connections as $connection) {
if (empty($connection->lastMessageTime)){
$connection->lastMessageTime = $time_now;
continue;
}
if ($time_now - $connection->lastMessageTime > 10) {
$connection->lastMessageTime = $time_now;
Gateway::sendToClient($connection->id, 'pong');
}
}
});
}
/**
* @title 当客户端连接时触发
*
* @param int $client_id 连接id
* @return void
*/
public static function onConnect($client_id) {
self::log(__FUNCTION__, $client_id);
}
/**
* @title 客户端连接时触发
*
* @param int $client_id 连接id
* @param mixed $message 具体消息
* @return void
*/
public static function onWebSocketConnect($client_id, $data) {
self::log(__FUNCTION__, $client_id, $data);
}
/**
* @title 当客户端发来消息时触发
*
* @param int $client_id 连接id
* @param mixed $message 具体消息
* @return void
*/
public static function onMessage(string $client_id, string $message) {
self::log(__FUNCTION__, $client_id, $message);
if (empty($message)) {
return;
}
Gateway::sendToAll($message);
if ($message == 'ping') {
Gateway::sendToClient($client_id, 'pong');
return;
}
}
/**
* @title 当用户断开连接时触发
*
* @param int $client_id 连接id
* @return void
*/
public static function onClose(string $client_id) {
self::log(__FUNCTION__, $client_id);
Gateway::destoryClient($client_id);
}
protected static function log(string $title, ...$data): void{
if (config('app.debug')) {
Log::info("{$title} | " . json_encode($data, 256));
}
}
}