listen('gateway.clientLogin', [$this,'onClientLogin']); $event->listen('gateway.lockClient',[$this,'onLockClient']); $event->listen('gateway.clientClose',[$this,'onClientClose']); } /** * Ws客户端登录 * @param $vars * @return void * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public function onClientLogin($vars): void { /** * @var PutMessage $put * @var SysUser $sysUser */ [$put, $sysUser] = $vars; $client = SysUserClient::where([ 'client_id' => $put->getClientId(), 'client_name'=> $put->getClientName(), 'user_id' => $put->userId, ])->find(); /* * 判断客户端是否锁定状态 */ if($client && $client['is_lock']) { // 通知客户端锁定屏幕 GatewayClientService::sendToClient($put->wsClientId,new OutMessage( SystemEnum::Lock_Client )); } /* * 客户端登录通知 */ $ip = $_SERVER['REMOTE_ADDR'] ?? ''; // 方式0. 通过enum枚举类型指定 GatewayClientService::sendToClient($put->wsClientId, new OutMessage( ScriptEnum::ElNotification, new ElNotification(title: '登录成功,欢迎您', message: "当前登录Ip: $ip", position: 'bottom-right'), )); // 方式1. 通过注入Array GatewayClientService::sendToClient($put->wsClientId, new OutMessage( ScriptEnum::create( new Swal(title: '登录成功,欢迎您', text: "当前登录Ip: $ip") ), )); } /** * Ws客户端锁定 * @param PutMessage $put * @return void * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public function onLockClient(PutMessage $put): void { $client = SysUserClient::where([ 'client_id' => $put->getClientId(), 'client_name'=> $put->getClientName(), 'user_id' => $put->userId, ])->find(); if($client) { // 加密传递的锁屏密码 $lock_password = password_hash($put->get('password',''), PASSWORD_DEFAULT); // 保存锁屏信息 $client->save([ 'is_lock'=>1, 'lock_password'=>$lock_password, 'lock_time'=>date('Y-m-d H:i:s') ]); // // 保存锁屏日志 // SysUserClientLog::create([ // 'event' => "{$put->type->value}.{$put->event->value}", // 'message'=> "A. 锁定客户端", // 'data' => json_encode(['inputPass'=> $lock_password]), // 'create_time' => date('Y-m-d H:i:s'), // 'client_data_id' => $client['id'] // ]); // // 通知客户端锁定屏幕 // GatewayClientService::sendToClient($put->wsClientId,new OutMessage( // SystemEnum::Lock_Client // )); } } /** * Ws客户端连接被关闭 * @return void */ public function onClientClose() { } }