//////////////////////////////////////////////////////////////////////////////////////
// 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 . //
//////////////////////////////////////////////////////////////////////////////////////
#ifndef WS_PROXY_H
#define WS_PROXY_H
#include
#include
#include
#include
class WSClient;
/**
* @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 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