2018-11-20 13:50:37 +00:00
|
|
|
<?php
|
|
|
|
|
|
2018-11-21 11:13:40 +00:00
|
|
|
namespace BeyondCode\LaravelWebSockets\LaravelEcho\Http\Controllers;
|
2018-11-20 13:50:37 +00:00
|
|
|
|
2018-11-21 11:13:40 +00:00
|
|
|
use Illuminate\Http\Request;
|
2018-11-20 13:50:37 +00:00
|
|
|
use Ratchet\ConnectionInterface;
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
2018-11-21 11:13:40 +00:00
|
|
|
use GuzzleHttp\Psr7\ServerRequest;
|
2018-11-20 13:50:37 +00:00
|
|
|
use Ratchet\Http\HttpServerInterface;
|
|
|
|
|
use Psr\Http\Message\RequestInterface;
|
2018-11-21 11:13:40 +00:00
|
|
|
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
|
2018-11-20 13:50:37 +00:00
|
|
|
|
|
|
|
|
abstract class EchoController implements HttpServerInterface
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This is called before or after a socket is closed (depends on how it's closed). SendMessage to $conn will not result in an error if it has already been closed.
|
|
|
|
|
* @param ConnectionInterface $conn The socket/connection that is closing/closed
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
*/
|
|
|
|
|
function onClose(ConnectionInterface $conn)
|
|
|
|
|
{
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If there is an error with one of the sockets, or somewhere in the application where an Exception is thrown,
|
|
|
|
|
* the Exception is sent back down the stack, handled by the Server and bubbled back up the application through this method
|
|
|
|
|
* @param ConnectionInterface $conn
|
|
|
|
|
* @param \Exception $e
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
*/
|
|
|
|
|
function onError(ConnectionInterface $conn, \Exception $e)
|
|
|
|
|
{
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param \Ratchet\ConnectionInterface $conn
|
|
|
|
|
* @param \Psr\Http\Message\RequestInterface $request null is default because PHP won't let me overload; don't pass null!!!
|
|
|
|
|
* @throws \UnexpectedValueException if a RequestInterface is not passed
|
|
|
|
|
*/
|
|
|
|
|
public function onOpen(ConnectionInterface $conn, RequestInterface $request = null)
|
|
|
|
|
{
|
2018-11-21 11:13:40 +00:00
|
|
|
$queryParameters = [];
|
|
|
|
|
parse_str($request->getUri()->getQuery(), $queryParameters);
|
|
|
|
|
|
|
|
|
|
$serverRequest = (new ServerRequest(
|
|
|
|
|
$request->getMethod(),
|
|
|
|
|
$request->getUri(),
|
|
|
|
|
$request->getHeaders(),
|
|
|
|
|
$request->getBody(),
|
|
|
|
|
$request->getProtocolVersion()
|
|
|
|
|
))->withQueryParams($queryParameters);
|
|
|
|
|
|
|
|
|
|
$response = $this(Request::createFromBase((new HttpFoundationFactory)->createRequest($serverRequest)));
|
2018-11-20 13:50:37 +00:00
|
|
|
|
|
|
|
|
$conn->send(JsonResponse::create($response)->send());
|
|
|
|
|
$conn->close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Triggered when a client sends data through the socket
|
|
|
|
|
* @param \Ratchet\ConnectionInterface $from The socket/connection that sent the message to your application
|
|
|
|
|
* @param string $msg The message received
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
*/
|
|
|
|
|
function onMessage(ConnectionInterface $from, $msg)
|
|
|
|
|
{
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-21 11:13:40 +00:00
|
|
|
abstract public function __invoke(Request $request);
|
2018-11-20 13:50:37 +00:00
|
|
|
}
|