akashi-esquizolandia/lib/include/ws_proxy.h
Cerapter 7a3f4edf4a Separate main from lib
This is so that tests can use the logic without having to call in main as well.
Furthermore, this way, Qt actually recognises it as a library, and makes it easier to import to tests.
2021-04-23 19:05:32 +02:00

92 lines
3.5 KiB
C++

//////////////////////////////////////////////////////////////////////////////////////
// akashi - a server for Attorney Online 2 //
// Copyright (C) 2020 scatterflower //
// //
// This program is free software: you can redistribute it and/or modify //
// it under the terms of the GNU Affero General Public License as //
// published by the Free Software Foundation, either version 3 of the //
// License, or (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU Affero General Public License for more details. //
// //
// You should have received a copy of the GNU Affero General Public License //
// along with this program. If not, see <https://www.gnu.org/licenses/>. //
//////////////////////////////////////////////////////////////////////////////////////
#ifndef WS_PROXY_H
#define WS_PROXY_H
#include "include/ws_client.h"
#include <QMap>
#include <QTcpSocket>
#include <QtWebSockets/QtWebSockets>
#include <QHostAddress>
/**
* @brief Handles WebSocket connections by redirecting data sent through them through a local TCP connection
* for common handling.
*/
class WSProxy : public QObject {
Q_OBJECT
public:
/**
* @brief Creates a WSProxy instance.
*
* @param p_local_port The port through which the TCP connection should be directed. Should the same as with
* non-WebAO connections.
* @param p_ws_port The WebSocket port. Should the same that is opened for WebSockets connections.
* @param parent Qt-based parent, passed along to inherited constructor from QObject.
*/
WSProxy(int p_local_port, int p_ws_port, QObject* parent);
/**
* @brief Destructor for the WSProxy class.
*
* @details Marks the WebSocket server that is used to handle the proxy process to be deleted later.
*/
~WSProxy();
/**
* @brief Starts listening for WebSocket connections on the given port.
*/
void start();
public slots:
/**
* @brief Sets up the proxy process to the newly connected WebSocket.
*
* @details This function creates a TCP socket to establish the proxy, creates a WSClient to represent the client connecting through WebSocket.
*/
void wsConnected();
private:
/**
* @brief The WebSocket server listening to incoming WebSocket connections.
*/
QWebSocketServer* server;
/**
* @brief Every client connected through WebSocket.
*/
QVector<WSClient*> clients;
/**
* @brief The TCP port that the WebSocket connections will be redirected through.
*
* @note Should be the same that desktop clients connect through, and that was announced to the master server.
*/
int local_port;
/**
* @brief The port for incoming WebSocket connections.
*
* @note Should be the same that was announced to the master server.
*/
int ws_port;
};
#endif // WS_PROXY_H