Как пользоваться сокетами в Vue typescript

разрабатываю клиентскую часть на Vue typescript. Поступила задача написать чат. На бэке используется фреймворк Symfony, где уже прописан "socket server logic". Но проблема в том, что я никогда не делал чат и не использовал сокеты. Либа vue-socket-io я так понимаю не подойдет. А в сети я почему то не могу найти что то нормальное, документацию какую то и тд. Может быть вы подскажете какие нибудь ресурсы или же что то в этом роде? Заранее спасибо. А вот и код на беке

class ChatService implements MessageComponentInterface
{
protected array $connections = [];
protected JWTTokenManagerInterface $JWTManager;
protected UserRepository $userRepository;
protected LoggerInterface $logger;
protected MessageBusInterface $bus;

public function __construct(
    JWTTokenManagerInterface $JWTManager,
    UserRepository $userRepository,
    MessageBusInterface $bus,
    LoggerInterface $logger
)
{
    $this->JWTManager = $JWTManager;
    $this->userRepository = $userRepository;
    $this->bus = $bus;
    $this->logger = $logger;
}

function onOpen(ConnectionInterface $conn)
{
    $this->connections[] = $conn;
}

function onMessage(ConnectionInterface $from, $msg)
{
    $messageData = json_decode($msg, true, 512, JSON_THROW_ON_ERROR);

    if (!isset($messageData['chat_id'])) {
        $from->close();
    }
    try {
        //first message - auth
        if (isset($messageData['token'])) {
            $token = new JWTUserToken();
            $token->setRawToken($messageData['token']);
            $payload = $this->JWTManager->decode($token);

            if (!$user = $this>userRepository>findOneBy(['username'=>$payload['username']])) 
            {
                $from->close();
            }

            $connectionKey = $payload['username'] . ';' . $messageData['chat_id'];
            $allConnections = $this->connections;
            foreach ($allConnections as $key => $conn) {
                if ($conn === $from) {
                    $this->connections[$connectionKey] = $from;
                    //$from->send('..:: Connected as ' . $connectionKey . '  ::..');
                    unset($this->connections[$key]);
                    break;
                }

                continue;
            }
        } elseif (isset($messageData['username'])) {
            $currentKey = $messageData['username'] . ';' . $messageData['chat_id'];
            if (array_key_exists($currentKey, $this->connections)) {
                $isAnotherUserFound = false;
                foreach ($this->connections as $key => $connection) {
                    $chatId = explode(';', $key);
                    if (isset($chatId[1]) && $chatId[1] === $messageData['chat_id'] && $key !== $currentKey) {
                        $isAnotherUserFound = true;
                        $connection->send($messageData['message']);
                        $this->bus->dispatch(new UserMessage($messageData['username'], $messageData['chat_id'], $messageData['message']));
                        break;
                    }
                }

                if ($isAnotherUserFound === false) {
                    $this->bus->dispatch(new UserMessage($messageData['username'], $messageData['chat_id'], $messageData['message']));
                }
            }
        } else {
            $from->close();
        }
    } catch (\Exception $e) {
        $this->logger->error('Socket server error: ' . $e->getMessage());
    }
}

function onClose(ConnectionInterface $conn)
{
    foreach ($this->connections as $key => $conn_element) {
        if ($conn === $conn_element) {
            unset($this->connections[$key]);
            break;
        }
    }
}

function onError(ConnectionInterface $conn, \Exception $e)
{
    $this->logger->error('Socket server error: ' . $e->getMessage());
    $conn->close();
}

}


Ответы (0 шт):