Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.

Commit d7e47aa

Browse files
committed
add missing test for emitInTaskWorker
1 parent 5e9e768 commit d7e47aa

File tree

3 files changed

+78
-40
lines changed

3 files changed

+78
-40
lines changed

src/Server/Manager.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ protected function initialize()
114114
{
115115
$this->createTables();
116116
$this->prepareWebsocket();
117-
$this->setSwooleServerListeners();
117+
118+
if (! $this->container->make(Server::class)->taskworker) {
119+
$this->setSwooleServerListeners();
120+
}
118121
}
119122

120123
/**
@@ -123,10 +126,6 @@ protected function initialize()
123126
protected function setSwooleServerListeners()
124127
{
125128
$server = $this->container->make(Server::class);
126-
if ($server->taskworker){
127-
return;
128-
}
129-
130129
foreach ($this->events as $event) {
131130
$listener = Str::camel("on_$event");
132131
$callback = method_exists($this, $listener) ? [$this, $listener] : function () use ($event) {
@@ -175,10 +174,7 @@ public function onWorkerStart($server)
175174

176175
$this->container->make('events')->dispatch('swoole.workerStart', func_get_args());
177176

178-
if ($server->taskworker) {
179-
$this->setProcessName('task process');
180-
}
181-
$this->setProcessName('worker process');
177+
$this->setProcessName($server->taskworker ? 'task process' : 'worker process');
182178

183179
// clear events instance in case of repeated listeners in worker process
184180
Facade::clearResolvedInstance('events');

src/Websocket/Websocket.php

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -173,33 +173,23 @@ public function emit(string $event, $data): bool
173173
return false;
174174
}
175175

176-
/** @var Server $server */
176+
$payload = [
177+
'sender' => $this->sender,
178+
'fds' => $fds,
179+
'broadcast' => $this->isBroadcast,
180+
'assigned' => $assigned,
181+
'event' => $event,
182+
'message' => $data,
183+
];
184+
185+
$result = true;
177186
$server = App::make(Server::class);
178-
179-
if (!empty($server->taskworker)) {
180-
/** @var Manager $manager */
181-
$manager = App::make(Manager::class);
182-
$manager->pushMessage($server, [
183-
'sender' => $this->sender,
184-
'fds' => $fds,
185-
'broadcast' => $this->isBroadcast,
186-
'assigned' => $assigned,
187-
'event' => $event,
188-
'message' => $data,
189-
]);
190-
191-
$result = true;
187+
if ($server->taskworker) {
188+
App::make(Manager::class)->pushMessage($server, $payload);
192189
} else {
193190
$result = $server->task([
194191
'action' => static::PUSH_ACTION,
195-
'data' => [
196-
'sender' => $this->sender,
197-
'fds' => $fds,
198-
'broadcast' => $this->isBroadcast,
199-
'assigned' => $assigned,
200-
'event' => $event,
201-
'message' => $data,
202-
],
192+
'data' => $payload
203193
]);
204194
}
205195

tests/Websocket/WebsocketTest.php

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22

33
namespace SwooleTW\Http\Tests\Websocket;
44

5-
use Illuminate\Container\Container;
6-
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
5+
use Mockery as m;
76
use Illuminate\Http\Request;
7+
use InvalidArgumentException;
88
use Illuminate\Pipeline\Pipeline;
9+
use SwooleTW\Http\Server\Manager;
10+
use SwooleTW\Http\Tests\TestCase;
11+
use Illuminate\Container\Container;
912
use Illuminate\Support\Facades\App;
1013
use Illuminate\Support\Facades\Config;
11-
use InvalidArgumentException;
12-
use Mockery as m;
14+
use SwooleTW\Http\Websocket\Websocket;
1315
use SwooleTW\Http\Server\Facades\Server;
14-
use SwooleTW\Http\Tests\TestCase;
1516
use SwooleTW\Http\Websocket\Rooms\RoomContract;
16-
use SwooleTW\Http\Websocket\Websocket;
17+
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
1718

1819
class WebsocketTest extends TestCase
1920
{
@@ -326,12 +327,15 @@ public function testEmit()
326327
->times(3)
327328
->andReturn([3, 4, 5]);
328329

330+
$server = m::mock('server');
331+
$server->taskworker = false;
332+
329333
App::shouldReceive('make')
330334
->with(Server::class)
331335
->once()
332-
->andReturnSelf();
336+
->andReturn($server);
333337

334-
App::shouldReceive('task')
338+
$server->shouldReceive('task')
335339
->with([
336340
'action' => 'push',
337341
'data' => [
@@ -355,6 +359,54 @@ public function testEmit()
355359
$this->assertFalse($websocket->getIsBroadcast());
356360
}
357361

362+
public function testEmitInTaskWorker()
363+
{
364+
$sender = 1;
365+
$to = [1, 2, 'a', 'b', 'c'];
366+
$broadcast = true;
367+
$room = m::mock(RoomContract::class);
368+
$room->shouldReceive('getClients')
369+
->with(m::type('string'))
370+
->times(3)
371+
->andReturn([3, 4, 5]);
372+
373+
$payload = [
374+
'sender' => $sender,
375+
'fds' => [1, 2, 3, 4, 5],
376+
'broadcast' => $broadcast,
377+
'assigned' => true,
378+
'event' => $event = 'event',
379+
'message' => $data = 'data',
380+
];
381+
382+
$server = m::mock('server');
383+
$server->taskworker = true;
384+
385+
$manager = m::mock(Manager::class);
386+
$manager->shouldReceive('pushMessage')
387+
->with($server, $payload)
388+
->once();
389+
390+
App::shouldReceive('make')
391+
->with(Server::class)
392+
->once()
393+
->andReturn($server);
394+
395+
App::shouldReceive('make')
396+
->with(Manager::class)
397+
->once()
398+
->andReturn($manager);
399+
400+
$websocket = $this->getWebsocket($room);
401+
$websocket->setSender($sender)
402+
->to($to)
403+
->broadcast()
404+
->emit($event, $data);
405+
406+
$this->assertSame([], $websocket->getTo());
407+
$this->assertFalse($websocket->getIsBroadcast());
408+
}
409+
358410
public function testClose()
359411
{
360412
$fd = 1;

0 commit comments

Comments
 (0)