no commit message

This commit is contained in:
annnj-company
2026-04-27 10:10:35 +08:00
parent 68a0b1ab22
commit 6fc3e6b64f
19 changed files with 1058 additions and 64 deletions

View File

@@ -28,30 +28,12 @@ $sender_io->on('connection', function($socket) use (&$push_value){
// 客户端连接时立即发送当前数值
$socket->emit('push_value', ['value' => $push_value]);
// 连接时自动推送最新的未回价数量
try {
// 从ThinkPHP数据库配置文件读取数据库连接信息
$db_config = require __DIR__ . '/config/database.php';
$db_host = isset($db_config['hostname']) ? $db_config['hostname'] : 'localhost';
$db_name = isset($db_config['database']) ? $db_config['database'] : 'pgserver';
$db_user = isset($db_config['username']) ? $db_config['username'] : 'root';
$db_pass = isset($db_config['password']) ? $db_config['password'] : '';
$db_port = isset($db_config['hostport']) ? $db_config['hostport'] : '3306';
$db_charset = isset($db_config['charset']) ? $db_config['charset'] : 'utf8';
// 使用PDO连接数据库查询最新数量
$dsn = "mysql:host=$db_host;port=$db_port;dbname=$db_name;charset=$db_charset";
$pdo = new PDO($dsn, $db_user, $db_pass);
$stmt = $pdo->query('SELECT COUNT(*) as count FROM pg_inquiry WHERE return_price_status = 2');
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$count = $result['count'] ?? 0;
// 推送未回价数量
$socket->emit('updateUnreturnedCount', ['count' => $count]);
error_log("WebSocket连接时推送未回价数量: $count");
} catch (Exception $e) {
error_log("WebSocket连接时获取未回价数量失败: " . $e->getMessage());
}
// 连接时发送刷新事件,让客户端主动获取所有数量(避免重复查询逻辑)
error_log("WebSocket客户端连接发送4个刷新事件");
$socket->emit('updateUnreturnedCount', ['refresh' => true]);
$socket->emit('updateEstimatePendingCount', ['refresh' => true]);
$socket->emit('updateReportProduceCount', ['refresh' => true]);
$socket->emit('updateSurveyFollowCount', ['refresh' => true]);
$socket->on('login', function ($uid)use($socket){
global $uidConnectionMap;
@@ -65,6 +47,24 @@ $sender_io->on('connection', function($socket) use (&$push_value){
++$uidConnectionMap[$uid];
$socket->join($uid);
$socket->uid = $uid;
// 登录时推送刷新事件,让客户端主动获取所有数量
$socket->emit('updateSurveyFollowCount', ['refresh' => true]);
$socket->emit('updateUnreturnedCount', ['refresh' => true]);
$socket->emit('updateEstimatePendingCount', ['refresh' => true]);
$socket->emit('updateReportProduceCount', ['refresh' => true]);
error_log("WebSocket登录时推送用户{$uid}的4个刷新事件");
});
// 处理客户端主动刷新请求
$socket->on('refreshAllCounts', function()use($socket){
error_log("收到客户端刷新请求");
// 发送刷新事件给当前客户端
$socket->emit('updateSurveyFollowCount', ['refresh' => true]);
$socket->emit('updateUnreturnedCount', ['refresh' => true]);
$socket->emit('updateEstimatePendingCount', ['refresh' => true]);
$socket->emit('updateReportProduceCount', ['refresh' => true]);
error_log("已向客户端发送刷新事件(包含报告数量)");
});
$socket->on('disconnect', function () use($socket) {
@@ -128,15 +128,24 @@ $sender_io->on('workerStart', function()use ($sender_io, $http_port){
$event = isset($msgContent['event']) ? $msgContent['event'] : '';
$eventData = isset($msgContent['data']) ? $msgContent['data'] : '';
error_log("Broadcast check - event: '$event', data: '$eventData'");
error_log("=== WebSocket广播调试 ===");
error_log("事件名称: '$event'");
error_log("原始数据: '$eventData'");
if(!empty($event)){
if(is_string($eventData)){
$decoded = json_decode($eventData, true);
$eventData = $decoded !== null ? $decoded : $eventData;
}
$sender_io->emit($event, $eventData);
error_log("Broadcast sent - event: $event, data: " . print_r($eventData, true));
error_log("解码后数据: " . print_r($eventData, true));
// 获取所有连接的客户端并发送消息
// PHPSocketIO 1.x 使用 connections 数组获取所有连接
foreach ($sender_io->connections as $connection) {
$connection->emit($event, $eventData);
}
error_log("广播已发送到所有客户端 - 事件: $event");
return $http_connection->send('ok');
}
}