1. Go to this page and download the library: Download sfcod/socketio 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/ */
sfcod / socketio example snippets
namespace App\SocketIo;
use SfCod\SocketIoBundle\Service\JoinHandler as JoinHandlerBase;
class JoinHandler extends JoinHandlerBase
{
public function fire(): array
{
// Some additional logic here.
// ...
return array_merge_recursive(parent::fire(), [
'key' => 'value'
]);
}
}
use SfCod\SocketIoBundle\Events\EventInterface;
use SfCod\SocketIoBundle\Events\EventPublisherInterface;
use SfCod\SocketIoBundle\Events\AbstractEvent;
class CountEvent extends AbstractEvent implements EventInterface, EventPublisherInterface
{
/**
* Changel name. For client side this is nsp.
*/
public static function broadcastOn(): array
{
return ['notifications'];
}
/**
* Event name
*/
public static function name(): string
{
return 'update_notification_count';
}
/**
* Emit client event
* @return array
*/
public function fire(): array
{
return [
'count' => 10,
];
}
}
use SfCod\SocketIoBundle\Events\EventInterface;
use SfCod\SocketIoBundle\Events\EventSubscriberInterface;
use SfCod\SocketIoBundle\Events\AbstractEvent;
use SfCod\SocketIoBundle\Service\Broadcast;
class MarkAsReadEvent extends AbstractEvent implements EventInterface, EventSubscriberInterface
{
private $broadcast;
public function __construct(Broadcast $broadcast)
{
$this->broadcast = $broadcast;
}
/**
* Changel name. For client side this is nsp.
*/
public static function broadcastOn(): array
{
return ['notifications'];
}
/**
* Event name
*/
public static function name(): string
{
return 'mark_as_read_notification';
}
/**
* Handle client event
*/
public function handle()
{
// Mark notification as read
// And call client update
$this->broadcast->emit('update_notification_count', ['some key' => 'some value']);
}
}
use SfCod\SocketIoBundle\Events\EventSubscriberInterface;
use SfCod\SocketIoBundle\Events\EventInterface;
use SfCod\SocketIoBundle\Events\EventPolicyInterface;
use SfCod\SocketIoBundle\Events\AbstractEvent;
use SfCod\SocketIoBundle\Service\Broadcast;
class MarkAsReadEvent extends AbstractEvent implements EventInterface, EventSubscriberInterface, EventPolicyInterface
{
private $broadcast;
public function __construct(Broadcast $broadcast)
{
$this->broadcast = $broadcast;
}
/**
* Changel name. For client side this is nsp.
*/
public static function broadcastOn(): array
{
return ['notifications'];
}
/**
* Event name
*/
public static function name(): string
{
return 'mark_as_read_notification';
}
public function can($data): bool
{
// Check data from client
return true;
}
/**
* Emit client event
* @return array
*/
public function handle()
{
// Mark notification as read
// And call client update
$this->broadcast->emit('update_notification_count', ['some key' => 'some value']);
}
}
use SfCod\SocketIoBundle\Events\EventPublisherInterface;
use SfCod\SocketIoBundle\Events\EventInterface;
use SfCod\SocketIoBundle\Events\EventRoomInterface;
use SfCod\SocketIoBundle\Events\AbstractEvent;
class CountEvent extends AbstractEvent implements EventInterface, EventPublisherInterface, EventRoomInterface
{
/**
* Changel name. For client side this is nsp.
*/
public static function broadcastOn(): array
{
return ['notifications'];
}
/**
* Event name
*/
public static function name(): string
{
return 'update_notification_count';
}
/**
* Socket.io room
* @return string
*/
public function room(): string
{
return 'user_id_' . $this->userId;
}
/**
* Emit client event
* @return array
*/
public function fire(): array
{
return [
'count' => 10,
];
}
}
use SfCod\SocketIoBundle\Events\EventSubscriberInterface;
use SfCod\SocketIoBundle\Events\EventInterface;
use Psr\Log\LoggerInterface;
use SfCod\SocketIoBundle\Events\AbstractEvent;
class СonnectionEvent extends AbstractEvent implements EventInterface, EventSubscriberInterface
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
/**
* Changel name. For client side this is nsp.
*/
public static function broadcastOn(): array
{
return ['notifications'];
}
/**
* Event name
*/
public static function name(): string
{
return 'connection'; // or 'disconnect'
}
/**
* Handle client event
*/
public function handle()
{
// Socket.io ID
// $this->socketId
$this->logger->info('disconnect', $this->payload);
}
}
bash
php bin/console socket-io:php-server
js
var socket = io('{your_host_address}:1367/notifications');
socket.emit('mark_as_read_notification', {id: 10});
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.