Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.
Merged
Prev Previous commit
Next Next commit
fixes for working with websocket in jobs
  • Loading branch information
mxp100 committed Aug 10, 2019
commit 0351741bcf276f6f64bb20bd13e96692cff62797
10 changes: 6 additions & 4 deletions src/Server/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,18 @@ protected function initialize()
*/
protected function setSwooleServerListeners()
{
$server = $this->container->make(Server::class);
if ($server->taskworker){
return;
}

foreach ($this->events as $event) {
$listener = Str::camel("on_$event");
$callback = method_exists($this, $listener) ? [$this, $listener] : function () use ($event) {
$this->container->make('events')->dispatch("swoole.$event", func_get_args());
};

$this->container->make(Server::class)->on($event, $callback);
$server->on($event, $callback);
}
}

Expand Down Expand Up @@ -170,11 +175,8 @@ public function onWorkerStart($server)

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

// don't init laravel app in task workers
if ($server->taskworker) {
$this->setProcessName('task process');

return;
}
$this->setProcessName('worker process');

Expand Down
37 changes: 27 additions & 10 deletions src/Websocket/Websocket.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use Illuminate\Support\Facades\Config;
use InvalidArgumentException;
use SwooleTW\Http\Server\Facades\Server;
use SwooleTW\Http\Server\Manager;
use SwooleTW\Http\Websocket\Rooms\RoomContract;

/**
Expand Down Expand Up @@ -172,17 +173,33 @@ public function emit(string $event, $data): bool
return false;
}

$result = App::make(Server::class)->task([
'action' => static::PUSH_ACTION,
'data' => [
'sender' => $this->sender,
'fds' => $fds,
/** @var Server $server */
$server = App::make(Server::class);

if ($server->taskworker) {
/** @var Manager $manager */
$manager = App::make(Manager::class);
$result = $manager->pushMessage($server, [
'sender' => $this->sender,
'fds' => $fds,
'broadcast' => $this->isBroadcast,
'assigned' => $assigned,
'event' => $event,
'message' => $data,
],
]);
'assigned' => $assigned,
'event' => $event,
'message' => $data,
]);
} else {
$result = $server->task([
'action' => static::PUSH_ACTION,
'data' => [
'sender' => $this->sender,
'fds' => $fds,
'broadcast' => $this->isBroadcast,
'assigned' => $assigned,
'event' => $event,
'message' => $data,
],
]);
}

$this->reset();

Expand Down