1. Go to this page and download the library: Download cesurapp/swoole-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\Cron;
use Cesurapp\SwooleBundle\Cron\AbstractCronJob;
/**
* Predefined Scheduling
*
* '@yearly' => '0 0 1 1 *',
* '@annually' => '0 0 1 1 *',
* '@monthly' => '0 0 1 * *',
* '@weekly' => '0 0 * * 0',
* '@daily' => '0 0 * * *',
* '@hourly' => '0 * * * *',
* '@EveryMinute' => '* * * * *',
* '@EveryMinute5' => '*/5 * * * *',
* '@EveryMinute10' => '*/10 * * * *',
* '@EveryMinute15' => '*/15 * * * *',
* '@EveryMinute30' => '*/30 * * * *',
*/
class ExampleCron extends AbstractCronJob
{
public string $TIME = '@EveryMinute10';
public bool $ENABLE = true;
public int $TIMEOUT = 1200; // Seconds a run may take before it is stopped
public function __invoke(): void
{
// Cron job logic here
}
}
namespace App\Task;
use Cesurapp\SwooleBundle\Task\TaskInterface;
class ExampleTask implements TaskInterface
{
public function __invoke(string $data): mixed
{
$payload = unserialize($data);
var_dump(
$payload['name'],
$payload['invoke']
);
return 'Task completed';
}
}
namespace App\Controller;
use App\Task\ExampleTask;
use Cesurapp\SwooleBundle\Task\TaskHandler;
use Symfony\Component\HttpFoundation\Response;
class ExampleController
{
public function __construct(
private readonly TaskHandler $taskHandler
) {}
public function hello(): Response
{
$this->taskHandler->dispatch(ExampleTask::class, [
'name' => 'Test',
'invoke' => 'Data'
]);
return new Response('Task dispatched');
}
}
namespace App\Process;
use Cesurapp\SwooleBundle\Process\AbstractProcessJob;
class RedisListenerProcess extends AbstractProcessJob
{
// Is process active?
public bool $ENABLE = true;
// Restart when process completes
public bool $RESTART = true;
// Wait time before restart (seconds)
public int $RESTART_DELAY = 5;
public function __construct(
private readonly RedisClient $redis,
private readonly LoggerInterface $logger
) {
}
public function __invoke(): void
{
$this->logger->info('Redis listener started');
// Redis SUBSCRIBE command
$this->redis->subscribe(['channel1', 'channel2'], function ($redis, $channel, $message) {
$this->logger->info("Received message from {$channel}: {$message}");
// Process here
});
}
}
namespace App\Process;
use Cesurapp\SwooleBundle\Process\AbstractProcessJob;
use Doctrine\DBAL\Connection;
class PostgresListenerProcess extends AbstractProcessJob
{
public bool $ENABLE = true;
public bool $RESTART = true;
public int $RESTART_DELAY = 3;
public function __construct(
private readonly Connection $connection,
private readonly LoggerInterface $logger
) {
}
public function __invoke(): void
{
$this->logger->info('Postgres listener started');
// LISTEN command
$this->connection->executeStatement('LISTEN my_channel');
while (true) {
// Wait for notification
$notification = pg_get_notify($this->connection->getNativeConnection());
if ($notification) {
$this->logger->info('Received notification', [
'channel' => $notification['message'],
'payload' => $notification['payload']
]);
// Process here
}
usleep(100000); // Wait 100ms
}
}
}
namespace App\Process;
use Cesurapp\SwooleBundle\Process\AbstractProcessJob;
class OneTimeProcess extends AbstractProcessJob
{
public bool $ENABLE = true;
public bool $RESTART = false; // Restart disabled
public function __invoke(): void
{
// One-time operation
$this->doSomething();
// The job is done; the process stays parked (see the notes below)
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.