Skip to content

Commit 34035ea

Browse files
committed
fixed bugs
1 parent 5f2414c commit 34035ea

8 files changed

Lines changed: 55 additions & 25 deletions

File tree

src/Events/ClientEvent.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Workbunny\WebmanPushServer\PushServer;
2020
use Workbunny\WebmanPushServer\Traits\ChannelMethods;
2121
use Workerman\Connection\TcpConnection;
22+
use function Workbunny\WebmanPushServer\ms_timestamp;
2223
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRESENCE;
2324
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRIVATE;
2425

@@ -61,10 +62,11 @@ public function response(TcpConnection $connection, array $request): void
6162
// 广播 客户端消息
6263
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
6364
'appKey' => PushServer::getConnectionProperty($connection,'appKey'),
65+
'socketId' => PushServer::getConnectionProperty($connection,'socketId'),
66+
'timestamp' => ms_timestamp(),
6467
'channel' => $channel,
6568
'event' => $event,
6669
'data' => $data,
67-
'socketId' => PushServer::getConnectionProperty($connection,'socketId')
6870
]);
6971
}
7072
}

src/Events/Subscribe.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Workbunny\WebmanPushServer\PublishTypes\AbstractPublishType;
1919
use Workbunny\WebmanPushServer\PushServer;
2020
use Workerman\Connection\TcpConnection;
21+
use function Workbunny\WebmanPushServer\ms_timestamp;
2122
use function Workbunny\WebmanPushServer\uuid;
2223
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRESENCE;
2324
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRIVATE;
@@ -167,6 +168,8 @@ public static function subscribeChannel(TcpConnection $connection, string $chann
167168
// 内部事件广播 通道被创建事件
168169
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_SERVER, [
169170
'appKey' => $appKey,
171+
'socketId' => $socketId,
172+
'timestamp' => ms_timestamp(),
170173
'channel' => $channel,
171174
'event' => EVENT_CHANNEL_OCCUPIED,
172175
'data' => [
@@ -202,15 +205,16 @@ public static function subscribeChannel(TcpConnection $connection, string $chann
202205
* {"event":"pusher_internal:member_added","data":{"user_id":1488465780,"user_info":"{\"name\":\"123\",\"sex:\"1\"}","channel ":"presence-channel"}}
203206
*/
204207
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
205-
'appKey' => $appKey,
206-
'channel' => $channel,
207-
'event' => EVENT_MEMBER_ADDED,
208-
'data' => [
208+
'appKey' => $appKey,
209+
'socketId' => $socketId,
210+
'timestamp' => ms_timestamp(),
211+
'channel' => $channel,
212+
'event' => EVENT_MEMBER_ADDED,
213+
'data' => [
209214
'id' => uuid(),
210215
'user_id' => $userId,
211216
'user_info' => $userInfo
212217
],
213-
'socketId' => $socketId
214218
]);
215219
}
216220
}

src/Events/Unsubscribe.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Workbunny\WebmanPushServer\PublishTypes\AbstractPublishType;
2020
use Workbunny\WebmanPushServer\PushServer;
2121
use Workerman\Connection\TcpConnection;
22+
use function Workbunny\WebmanPushServer\ms_timestamp;
2223
use function Workbunny\WebmanPushServer\uuid;
2324
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRESENCE;
2425
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRIVATE;
@@ -83,14 +84,15 @@ public static function unsubscribeChannel(TcpConnection $connection, string $cha
8384
* {"event":"pusher_internal:member_removed","data":"{"user_id":"14884657801"}","channel":"presence-channel"}
8485
*/
8586
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
86-
'appKey' => $appKey,
87-
'channel' => $channel,
88-
'event' => EVENT_MEMBER_REMOVED,
89-
'data' => [
87+
'appKey' => $appKey,
88+
'socketId' => $socketId,
89+
'timestamp' => ms_timestamp(),
90+
'channel' => $channel,
91+
'event' => EVENT_MEMBER_REMOVED,
92+
'data' => [
9093
'id' => uuid(),
9194
'user_id' => $uid
9295
],
93-
'socketId' => $socketId
9496
]);
9597
}
9698
}
@@ -101,6 +103,8 @@ public static function unsubscribeChannel(TcpConnection $connection, string $cha
101103
// 内部事件广播 通道被移除事件
102104
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_SERVER, [
103105
'appKey' => $appKey,
106+
'socketId' => $socketId,
107+
'timestamp' => ms_timestamp(),
104108
'channel' => $channel,
105109
'event' => EVENT_CHANNEL_VACATED,
106110
'data' => [

src/PublishTypes/ServerType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ class ServerType extends AbstractPublishType
2323
public static function response(array $data): void
2424
{
2525
static::verify($data, [
26-
['appKey', 'is_string', true],
2726
['event', 'is_string', true],
27+
['appKey', 'is_string', false],
2828
['socketId', 'is_string', false],
2929
]);
3030
// 断开连接事件

src/PushServer.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,9 @@ public static function error(TcpConnection $connection, ?string $code, ?string $
358358
public static function send(TcpConnection $connection, ?string $channel, ?string $event, mixed $data): void
359359
{
360360
$response = static::filter([
361-
'timestamp' => intval(microtime(true) * 1000),
361+
'appKey' => static::getConnectionProperty($connection, 'appKey'),
362+
'socketId' => PushServer::getConnectionProperty($connection,'socketId'),
363+
'timestamp' => ms_timestamp(),
362364
'channel' => $channel,
363365
'event' => $event,
364366
'data' => $data

src/config/plugin/workbunny/webman-push-server/route.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use support\Response;
2121
use Workbunny\WebmanPushServer\ApiRoute;
2222
use Workbunny\WebmanPushServer\PushServer;
23+
use function Workbunny\WebmanPushServer\ms_timestamp;
2324
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRESENCE;
2425
use const Workbunny\WebmanPushServer\CHANNEL_TYPE_PRIVATE;
2526
use function Workbunny\WebmanPushServer\response;
@@ -188,10 +189,11 @@
188189
foreach ($channels as $channel) {
189190
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_CLIENT, PushServer::filter([
190191
'appKey' => $appKey,
192+
'socketId' => $socketId,
193+
'timestamp' => ms_timestamp(),
191194
'channel' => $channel,
192195
'event' => $event,
193196
'data' => $data,
194-
'socketId' => $socketId,
195197
]));
196198
}
197199
return response(200, json_encode([
@@ -218,10 +220,11 @@
218220
$socketId = $package['socket_id'] ?? null;
219221
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_CLIENT, PushServer::filter([
220222
'appKey' => $appKey,
223+
'socketId' => $socketId,
224+
'timestamp' => ms_timestamp(),
221225
'channel' => $channel,
222226
'event' => $event,
223227
'data' => $data,
224-
'socketId' => $socketId,
225228
]));
226229
}
227230
return response(200,json_encode([
@@ -247,6 +250,7 @@
247250
PushServer::publishUseRetry(AbstractPublishType::PUBLISH_TYPE_SERVER, [
248251
'appKey' => $appKey,
249252
'socket_id' => $socketId,
253+
'timestamp' => ms_timestamp(),
250254
'event' => EVENT_TERMINATE_CONNECTION,
251255
'data' => [
252256
'type' => 'API',

src/helpers.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,14 @@ function str2byte(string|int|float $str): int
8080
{
8181
return strlen((string)$str);
8282
}
83+
}
84+
85+
/**
86+
* 毫秒时间戳
87+
*/
88+
if (!function_exists('ms_timestamp')) {
89+
function ms_timestamp(): int
90+
{
91+
return intval(microtime(true) * 1000);
92+
}
8393
}

tests/PushServerBaseTest.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Workbunny\WebmanPushServer\PublishTypes\AbstractPublishType;
2121
use Workbunny\WebmanPushServer\PushServer;
2222
use Workerman\Worker;
23+
use function Workbunny\WebmanPushServer\ms_timestamp;
2324
use const Workbunny\WebmanPushServer\EVENT_CONNECTION_ESTABLISHED;
2425
use const Workbunny\WebmanPushServer\EVENT_ERROR;
2526
use const Workbunny\WebmanPushServer\EVENT_PONG;
@@ -442,9 +443,10 @@ public function testPushServerSubscribeResponse()
442443

443444
// 模拟服务广播响应 非忽略的channel广播
444445
PushServer::_subscribeResponse(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
445-
'appKey' => PushServer::getConnectionProperty($channelConnection, 'appKey'),
446-
'event' => EVENT_PONG,
447-
'channel' => 'public-test'
446+
'appKey' => PushServer::getConnectionProperty($channelConnection, 'appKey'),
447+
'timestamp' => ms_timestamp(),
448+
'event' => EVENT_PONG,
449+
'channel' => 'public-test'
448450
]);
449451
// 断言检测回执buffer 仅合法channel连接接收到广播回执
450452
$this->assertNull($tcpConnection->getSendBuffer());
@@ -457,10 +459,11 @@ public function testPushServerSubscribeResponse()
457459

458460
// 模拟服务广播响应 指定忽略socketId的channel广播
459461
PushServer::_subscribeResponse(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
460-
'appKey' => PushServer::getConnectionProperty($channelConnection, 'appKey'),
461-
'event' => EVENT_PONG,
462-
'channel' => 'public-test',
463-
'socketId' => PushServer::getConnectionProperty($channelConnection, 'socketId'),
462+
'appKey' => PushServer::getConnectionProperty($channelConnection, 'appKey'),
463+
'socketId' => PushServer::getConnectionProperty($channelConnection, 'socketId'),
464+
'timestamp' => ms_timestamp(),
465+
'event' => EVENT_PONG,
466+
'channel' => 'public-test',
464467
]);
465468
// 断言检测回执buffer 所有连接不应接收到回执
466469
$this->assertNull($tcpConnection->getSendBuffer());
@@ -473,9 +476,10 @@ public function testPushServerSubscribeResponse()
473476

474477
// 模拟服务广播响应 向未知连接广播
475478
PushServer::_subscribeResponse(AbstractPublishType::PUBLISH_TYPE_CLIENT, [
476-
'appKey' => PushServer::$unknownTag,
477-
'event' => EVENT_PONG,
478-
'channel' => 'public-test',
479+
'appKey' => PushServer::$unknownTag,
480+
'timestamp' => ms_timestamp(),
481+
'event' => EVENT_PONG,
482+
'channel' => 'public-test',
479483
]);
480484
// 断言检测回执buffer 所有连接不应接收到回执
481485
$this->assertNull($tcpConnection->getSendBuffer());

0 commit comments

Comments
 (0)