So I've followed a rough outline of another example on another post to creating multiple websockets and to share data between the two:
class WebSocketBridge implements MessageComponentInterface {
public function onOpen(ConnectionInterface $conn) { }
// etc
}
class WebSocketClients implements MessageComponentInterface {
private $delegate;
public function __construct(MessageComponentInterface $delegate) {
$this->delegate = $delegate;
}
public function onOpen(ConnectionInterface $conn) {
$conn->source = 'MainClients';
$this->delegate->onOpen($conn);
}
}
class WebSocketOthers { // etc, like WebSocketClients
}
My biggest struggle at the moment is figuring how to run the servers. The following code does not work...at least it won't initialize both servers. It'll only open a connection on the 1st server:
use Ratchet\Server\IoServer;
use App\WebSocketClients;
use App\WebSocketOthers;
use App\WebSocketBridge;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
require dirname(__DIR__) . '/vendor/autoload.php';
$bridge = new WebSocketBridge ;
$loop = React\EventLoop\Factory::create();
$server = IoServer::factory(
new WebSocketClients($bridge),
8989
);
$server2 = IoServer::factory(
new HttpServer(
new WsServer(
new WebSocketOthers($bridge)
)
),
9090
);
$server->run();
$server2->run();
I've tried to do the following, but running into an error about Argument 2 integer issues.
$bridge = new WebSocketBridge;
$loop = React\EventLoop\Factory::create();
$PCAServer = new IoServer(new WebSocketClients($bridge), 8989, $loop);
$wsServer = new IoServer(new HttpServer(new WsServer(new WebSocketOthers($bridge))), 9090, $loop);
$loop->run();
It seems I've solved my own issue. For those who need some help implementing this:
use Ratchet\Server\IoServer;
use App\WebSocketClients;
use App\WebSocketOthers ;
use App\WebSocketBridge;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
require dirname(__DIR__) . '/vendor/autoload.php';
$bridge = new WebSocketBridge;
$loop = React\EventLoop\Factory::create();
$port1 = 8989;
$address1 = '127.0.0.1';
$socket1 = new React\Socket\Server($loop);
$socket1->listen($port1, $address1);
$port2 = 9090;
$address2 = '127.0.0.1';
$socket2 = new React\Socket\Server($loop);
$socket2->listen($port2, $address2);
$clientServer = new IoServer(new WebSocketClients($bridge), $socket1, $loop);
$wsServer = new IoServer(new HttpServer(new WsServer(new WebSocketOthers ($bridge))), $socket2, $loop);
$loop->run();
Most helpful comment
It seems I've solved my own issue. For those who need some help implementing this: