157 lines
3.5 KiB
PHP
157 lines
3.5 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace app\common\gateway;
|
|||
|
|
|
|||
|
|
use GatewayWorker\Lib\Gateway;
|
|||
|
|
use support\Log;
|
|||
|
|
use Webman\Event\Event;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* IM网关通讯接口
|
|||
|
|
* Class Events
|
|||
|
|
* @package app\common\gateway
|
|||
|
|
* @Author Meystack <
|
|||
|
|
*/
|
|||
|
|
class Events
|
|||
|
|
{
|
|||
|
|
/**
|
|||
|
|
* onWorkerStart 事件回调
|
|||
|
|
* @param $worker
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onWorkerStart($worker): void
|
|||
|
|
{
|
|||
|
|
Event::emit('onWorkerStart', $worker);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 当客户端连接上gateway进程时(TCP三次握手完毕时)触发
|
|||
|
|
* @param $client_id
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onConnect($client_id): void
|
|||
|
|
{
|
|||
|
|
$data = [
|
|||
|
|
'type' => 'init',
|
|||
|
|
'client_id' => $client_id,
|
|||
|
|
];
|
|||
|
|
Gateway::sendToCurrentClient(json_encode($data));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 当客户端连接上gateway完成websocket握手时触发
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param $data
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onWebSocketConnect($client_id, $data): void
|
|||
|
|
{
|
|||
|
|
Event::emit('onWebSocketConnect', $client_id, $data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 当客户端发来数据(Gateway进程收到数据)后触发
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param $message
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onMessage($client_id, $message): void
|
|||
|
|
{}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 推送消息
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param array $message
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onSendMsg($client_id, array $message = []): void
|
|||
|
|
{
|
|||
|
|
Gateway::sendToUid($client_id, json_encode($message, JSON_UNESCAPED_UNICODE));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 绑定用户UID
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param $uid
|
|||
|
|
* @param string $type
|
|||
|
|
* @return bool
|
|||
|
|
*/
|
|||
|
|
public static function onBindUid($client_id, $uid, string $type = 'admin'): bool
|
|||
|
|
{
|
|||
|
|
if (empty($client_id) || empty($uid)) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$uid = $type . '_' . $uid;
|
|||
|
|
try {
|
|||
|
|
Gateway::bindUid($client_id, $uid);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
Log::info('绑定用户UID失败:' . $e->getMessage());
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 通过UID获取socketID
|
|||
|
|
* @param $uid
|
|||
|
|
* @param string $type
|
|||
|
|
* @return array
|
|||
|
|
*/
|
|||
|
|
public static function onGetClientByUid($uid, string $type = 'admin'): array
|
|||
|
|
{
|
|||
|
|
if (empty($uid)) {
|
|||
|
|
return [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$uid = $type . '_' . $uid;
|
|||
|
|
return Gateway::getClientIdByUid($uid);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 当用户断开连接时触发
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param $uid
|
|||
|
|
* @param string $type
|
|||
|
|
* @return bool
|
|||
|
|
*/
|
|||
|
|
public static function onUnbindUid($client_id, $uid, string $type = 'admin'): bool
|
|||
|
|
{
|
|||
|
|
if (empty($client_id) || empty($uid)) {
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$uid = $type . '_' . $uid;
|
|||
|
|
try {
|
|||
|
|
Gateway::unbindUid($client_id, $uid);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
Log::info('解绑用户UID失败:' . $e->getMessage());
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 用户加入群组
|
|||
|
|
* @param $client_id
|
|||
|
|
* @param $group_id
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onJoinGroup($client_id, $group_id): void
|
|||
|
|
{
|
|||
|
|
Gateway::joinGroup($client_id, $group_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 当客户端断开连接时触发
|
|||
|
|
* @param $client_id
|
|||
|
|
* @return void
|
|||
|
|
*/
|
|||
|
|
public static function onClose($client_id): void
|
|||
|
|
{
|
|||
|
|
Event::emit('onWebSocketClose', $client_id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|