From d6352bc889638b82a887e0a1a138f2b8086dbbdb Mon Sep 17 00:00:00 2001 From: Osmium Sorcerer Date: Sun, 22 Mar 2026 18:56:58 +0000 Subject: Handle extension packets using binary frames The subprotocol shall use binary frames, and AO protocol stays separated within the text frames. --- src/networkmanager.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/networkmanager.cpp') diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index 779dc1e..fa7aa16 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -159,6 +159,7 @@ void NetworkManager::connect_to_server(ServerInfo server) connect(m_connection, &WebSocketConnection::disconnectedFromServer, ao_app, &AOApplication::server_disconnected); connect(m_connection, &WebSocketConnection::errorOccurred, this, [](QString error) { qCritical() << "Connection error:" << error; }); connect(m_connection, &WebSocketConnection::receivedPacket, this, &NetworkManager::handle_server_packet); + connect(m_connection, &WebSocketConnection::receivedExMessage, this, &NetworkManager::handle_ex_message); m_connection->connectToServer(server); } @@ -192,6 +193,27 @@ void NetworkManager::ship_server_packet(AOPacket packet) m_connection->sendPacket(packet); } +void NetworkManager::ship_ex_message(const QByteArray &msg) +{ + if (!m_connection) + { + qCritical() << "Failed to ship packet; no connection."; + return; + } + + if (!m_connection->isConnected()) + { + qCritical() << "Failed to ship packet; not connected."; + return; + } + + // TODO: Diagnostic notation +#ifdef NETWORK_DEBUG + qInfo().noquote() << "Sending message:" << msg.toHex(' '); +#endif + m_connection->sendExMessage(msg); +} + void NetworkManager::join_to_server() { ship_server_packet(AOPacket("askchaa")); @@ -205,6 +227,14 @@ void NetworkManager::handle_server_packet(AOPacket packet) ao_app->server_packet_received(packet); } +void NetworkManager::handle_ex_message(QByteArray message) +{ +#ifdef NETWORK_DEBUG + qInfo().noquote() << "Received message:" << message.toHex(' '); +#endif + ao_app->ex_message_received(message); +} + QNetworkReply *NetworkManager::get_audio_url(const QUrl &url) { QNetworkRequest req(url); -- cgit