created working session and client handler w/ websocket
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace Mine\SeekerBundle\EventListener;
|
||||
|
||||
use Gos\Bundle\WebSocketBundle\Event\ClientEvent;
|
||||
use Gos\Bundle\WebSocketBundle\Event\ClientErrorEvent;
|
||||
use Gos\Bundle\WebSocketBundle\Event\ServerEvent;
|
||||
use Gos\Bundle\WebSocketBundle\Event\ClientRejectedEvent;
|
||||
|
||||
class AcmeClientEventListener
|
||||
{
|
||||
/**
|
||||
* Called whenever a client connects
|
||||
*
|
||||
* @param ClientEvent $event
|
||||
*/
|
||||
public function onClientConnect(ClientEvent $event)
|
||||
{
|
||||
$conn = $event->getConnection();
|
||||
|
||||
echo $conn->resourceId . " connected" . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever a client disconnects
|
||||
*
|
||||
* @param ClientEvent $event
|
||||
*/
|
||||
public function onClientDisconnect(ClientEvent $event)
|
||||
{
|
||||
$conn = $event->getConnection();
|
||||
|
||||
echo $conn->resourceId . " disconnected" . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever a client errors
|
||||
*
|
||||
* @param ClientErrorEvent $event
|
||||
*/
|
||||
public function onClientError(ClientErrorEvent $event)
|
||||
{
|
||||
$conn = $event->getConnection();
|
||||
$e = $event->getException();
|
||||
|
||||
echo "connection error occurred: " . $e->getMessage() . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever server start
|
||||
*
|
||||
* @param ServerEvent $event
|
||||
*/
|
||||
public function onServerStart(ServerEvent $event)
|
||||
{
|
||||
$event = $event->getEventLoop();
|
||||
|
||||
echo 'Server was successfully started !' . PHP_EOL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever client is rejected by application
|
||||
*
|
||||
* @param ClientRejectedEvent $event
|
||||
*/
|
||||
public function onClientRejected(ClientRejectedEvent $event)
|
||||
{
|
||||
$origin = $event->getOrigin;
|
||||
|
||||
echo 'connection rejected from ' . $origin . PHP_EOL;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,44 @@
|
||||
# PDO Session Handler Configuration !!!!! --> moved to main config.yml
|
||||
#framework:
|
||||
# session:
|
||||
# handler_id: session.handler.pdo
|
||||
|
||||
# Doctrine cache
|
||||
doctrine_cache:
|
||||
providers:
|
||||
redis_cache:
|
||||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
database: 3
|
||||
websocket_cache_client:
|
||||
type: redis
|
||||
alias: gos_web_socket.client_storage.driver.redis
|
||||
|
||||
# SNC
|
||||
snc_redis:
|
||||
clients:
|
||||
cache:
|
||||
type: predis
|
||||
alias: cache
|
||||
dsn: redis://localhost/2
|
||||
logging: "%kernel.debug%"
|
||||
options:
|
||||
profile: 2.2
|
||||
connection_timeout: 10
|
||||
read_write_timeout: 30
|
||||
|
||||
# Web Socket Configuration
|
||||
gos_web_socket:
|
||||
# for user ex.: var _WS_URI = "ws://{{ gos_web_socket_server_host }}:{{ gos_web_socket_server_port }}";
|
||||
shared_config: false
|
||||
server:
|
||||
port: 8080 # The port the socket server will listen on
|
||||
host: 127.0.0.1 # The host IP to bind to
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
router:
|
||||
resources:
|
||||
- "@MineSeekerBundle/Resources/config/pubsub/routing.yml"
|
||||
client:
|
||||
firewall: secured_area # Can be an array of firewalls
|
||||
firewall: main
|
||||
session_handler: "@session.handler.pdo"
|
||||
# storage:
|
||||
# driver: "@gos_web_socket.client_storage.driver.predis"
|
||||
# driver: "@gos_web_socket.server.in_memory.client_storage.driver"
|
||||
# ttl: 28800 # (optionally) time to live if you use redis driver
|
||||
# prefix: client # (optionally) prefix if you use redis driver, create key "client:1" instead key "1"
|
||||
|
||||
# PDO Session Handler Configuration
|
||||
framework:
|
||||
session:
|
||||
handler_id: session.handler.pdo
|
||||
#
|
||||
storage:
|
||||
driver: "@gos_web_socket.client_storage.driver.predis"
|
||||
decorator: "@gos_web_socket.client_storage.doctrine.decorator"
|
||||
|
||||
@@ -1,27 +1,48 @@
|
||||
services:
|
||||
# mine_seeker.example:
|
||||
# class: Mine\SeekerBundle\Example
|
||||
# arguments: ["@service_id", "plain_value", %parameter%]
|
||||
|
||||
pdo:
|
||||
class: PDO
|
||||
arguments:
|
||||
dsn: "mysql:host=%database_host%;dbname=%database_name%"
|
||||
user: "%database_user%"
|
||||
passwd: "%database_password%"
|
||||
calls:
|
||||
- [ setAttribute, [3, 2] ] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION
|
||||
|
||||
session.handler.pdo:
|
||||
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
|
||||
arguments:
|
||||
- "mysql:dbname=%database_name%"
|
||||
- { db_table: sessions, db_username: myuser, db_password: mypassword }
|
||||
public: false
|
||||
arguments: ["@pdo", {lock_mode: 0}]
|
||||
|
||||
# gos_web_scocket.client_storage.driver.predis:
|
||||
# class: Gos\Bundle\WebSocketBundle\Client\Driver\PredisDriver
|
||||
# arguments:
|
||||
# - "@cache.adapter.redis"
|
||||
# config.yml --> gos_web_socket > storage > client > driver
|
||||
gos_web_socket.client_storage.driver.predis:
|
||||
class: Gos\Bundle\WebSocketBundle\Client\Driver\PredisDriver
|
||||
arguments:
|
||||
- "@snc_redis.cache"
|
||||
|
||||
# config.yml --> gos_web_socket > storage > client > decorator
|
||||
gos_web_socket.client_storage.doctrine.decorator:
|
||||
class: Gos\Bundle\WebSocketBundle\Client\Driver\DoctrineCacheDriverDecorator
|
||||
arguments:
|
||||
- "@doctrine_cache.providers.doctrine.orm.default_result_cache"
|
||||
|
||||
acme_hello.topic_sample_service:
|
||||
class: Mine\SeekerBundle\Topic\AcmeTopic
|
||||
tags:
|
||||
- { name: gos_web_socket.topic }
|
||||
# arguments:
|
||||
# - { clientManipulator: "@gos_web_socket.websocket.client_manipulator" }
|
||||
arguments:
|
||||
clientManipulator: "@gos_web_socket.websocket.client_manipulator"
|
||||
|
||||
acme_hello.rpc_sample_service:
|
||||
class: Mine\SeekerBundle\Rpc\AcmeRpc
|
||||
tags:
|
||||
- { name: gos_web_socket.rpc }
|
||||
|
||||
gos_web_socket_server.client_event.listener:
|
||||
class: Mine\SeekerBundle\EventListener\AcmeClientEventListener
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: 'gos_web_socket.client_connected', method: onClientConnect }
|
||||
- { name: kernel.event_listener, event: 'gos_web_socket.client_disconnected', method: onClientDisconnect }
|
||||
- { name: kernel.event_listener, event: 'gos_web_socket.client_error', method: onClientError }
|
||||
- { name: kernel.event_listener, event: 'gos_web_socket.server_launched', method: onServerStart }
|
||||
- { name: kernel.event_listener, event: 'gos_web_socket.client_rejected', method: onClientRejected }
|
||||
|
||||
@@ -4,7 +4,7 @@ import GridControl from './grid/grid-control';
|
||||
class MineSeeker extends React.Component {
|
||||
/** after rendering */
|
||||
componentDidMount() {
|
||||
var websocket = WS.connect("ws://127.0.0.1:8080");
|
||||
var websocket = WS.connect("ws://mine.dev:8080");
|
||||
|
||||
/** session is an Autobahn JS WAMP session. */
|
||||
websocket.on("socket/connect", function (session) {
|
||||
@@ -46,7 +46,8 @@ class MineSeeker extends React.Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<GridControl ref="gridControl"/>
|
||||
<div></div>
|
||||
// <GridControl ref="gridControl"/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Mine\SeekerBundle\Topic;
|
||||
|
||||
//use Gos\Bundle\WebSocketBundle\Client\ClientManipulatorInterface;
|
||||
use Gos\Bundle\WebSocketBundle\Client\ClientManipulatorInterface;
|
||||
use Gos\Bundle\WebSocketBundle\Topic\TopicInterface;
|
||||
use Gos\Bundle\WebSocketBundle\Router\WampRequest;
|
||||
use Ratchet\ConnectionInterface;
|
||||
@@ -10,15 +10,18 @@ use Ratchet\Wamp\Topic;
|
||||
|
||||
class AcmeTopic implements TopicInterface
|
||||
{
|
||||
// protected $clientManipulator;
|
||||
//
|
||||
// /**
|
||||
// * @param ClientManipulatorInterface $clientManipulator
|
||||
// */
|
||||
// public function __construct(ClientManipulatorInterface $clientManipulator)
|
||||
// {
|
||||
// $this->clientManipulator = $clientManipulator;
|
||||
// }
|
||||
/** @var ClientManipulatorInterface */
|
||||
protected $clientManipulator;
|
||||
|
||||
/**
|
||||
* AcmeTopic constructor.
|
||||
*
|
||||
* @param $clientManipulator ClientManipulatorInterface
|
||||
*/
|
||||
public function __construct(ClientManipulatorInterface $clientManipulator)
|
||||
{
|
||||
$this->clientManipulator = $clientManipulator;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will receive any Subscription requests for this topic.
|
||||
@@ -30,12 +33,12 @@ class AcmeTopic implements TopicInterface
|
||||
*/
|
||||
public function onSubscribe(ConnectionInterface $connection, Topic $topic, WampRequest $request)
|
||||
{
|
||||
// $user = $this->clientManipulator->getClient($connection);
|
||||
$user = "";
|
||||
//this will broadcast the message to ALL subscribers of this topic.
|
||||
/** this will broadcast the message to ALL subscribers of this topic. */
|
||||
$user = $this->clientManipulator->getClient($connection);
|
||||
dump($user);
|
||||
$topic->broadcast([
|
||||
'msg' => $connection->resourceId . " has joined " . $topic->getId(),
|
||||
'user' => $user
|
||||
'user' => $this->getName()
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -49,7 +52,9 @@ class AcmeTopic implements TopicInterface
|
||||
*/
|
||||
public function onUnSubscribe(ConnectionInterface $connection, Topic $topic, WampRequest $request)
|
||||
{
|
||||
//this will broadcast the message to ALL subscribers of this topic.
|
||||
/** this will broadcast the message to ALL subscribers of this topic. */
|
||||
$user = $this->clientManipulator->getClient($connection);
|
||||
dump($user);
|
||||
$topic->broadcast(['msg' => $connection->resourceId . " has left " . $topic->getId()]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user