mirror of
https://gitlab.com/kelteseth/ScreenPlay.git
synced 2024-11-07 03:22:33 +01:00
Add server project
This commit is contained in:
parent
368bf83660
commit
e983a12aa8
@ -7,7 +7,8 @@ SUBDIRS = \
|
||||
ScreenPlay/ThirdParty/qt-google-analytics/qt-google-analytics.pro \
|
||||
ScreenPlay/ThirdParty/stomt-qt-sdk/sdk/stomt-qt-sdk.pro \
|
||||
ScreenPlayWidget/ScreenPlayWidget.pro \
|
||||
ScreenPlayWorkshop/ScreenPlayWorkshop.pro
|
||||
ScreenPlayWorkshop/ScreenPlayWorkshop.pro \
|
||||
ScreenPlayServer
|
||||
|
||||
ScreenPlayWindow.depends = ScreenPlaySDK
|
||||
ScreenPlayWidget.depends = ScreenPlaySDK
|
||||
|
28
ScreenPlayServer/ScreenPlayServer.pro
Normal file
28
ScreenPlayServer/ScreenPlayServer.pro
Normal file
@ -0,0 +1,28 @@
|
||||
QT -= gui
|
||||
|
||||
CONFIG += c++17 console
|
||||
QT += sql websockets network
|
||||
CONFIG -= app_bundle
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which as been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if you use deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
src/aimberserver.cpp
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
HEADERS += \
|
||||
src/aimberserver.h
|
31
ScreenPlayServer/main.cpp
Normal file
31
ScreenPlayServer/main.cpp
Normal file
@ -0,0 +1,31 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QScopedPointer>
|
||||
#include <QSharedPointer>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlQueryModel>
|
||||
|
||||
#include "src/aimberserver.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication a(argc, argv);
|
||||
|
||||
AimberServer ps(16395);
|
||||
/*
|
||||
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
|
||||
db.setHostName("localhost");
|
||||
db.setDatabaseName("ProtoLogin");
|
||||
db.setUserName("CommunityUser");
|
||||
//db.setPassword("windowsPW2");
|
||||
qDebug() << "Open Database " << db.open();
|
||||
|
||||
QSqlQueryModel* model = new QSqlQueryModel();
|
||||
model->setQuery("SELECT * FROM public.\"User\"");
|
||||
qDebug() << model->rowCount();
|
||||
*/
|
||||
|
||||
return a.exec();
|
||||
}
|
125
ScreenPlayServer/src/aimberserver.cpp
Normal file
125
ScreenPlayServer/src/aimberserver.cpp
Normal file
@ -0,0 +1,125 @@
|
||||
#include "aimberserver.h"
|
||||
//#include <google/protobuf/message_lite.h>
|
||||
//#include <google/protobuf/any.pb.h>.
|
||||
|
||||
|
||||
AimberServer::AimberServer(int port, QObject* parent) : QObject(parent)
|
||||
{
|
||||
/** --------- SSL --------- **/
|
||||
/*
|
||||
QSslConfiguration sslConfiguration;
|
||||
|
||||
// Create a cert & key
|
||||
// https://developer.salesforce.com/blogs/developer-relations/2011/05/generating-valid-self-signed-certificates.html
|
||||
QFile certFile(QStringLiteral("server.crt"));
|
||||
QFile keyFile(QStringLiteral("server.key"));
|
||||
|
||||
certFile.open(QIODevice::ReadOnly);
|
||||
keyFile.open(QIODevice::ReadOnly);
|
||||
|
||||
QSslCertificate certificate(&certFile, QSsl::Pem);
|
||||
|
||||
if(certificate.isNull())
|
||||
{
|
||||
qDebug() << "Invalid certificate!";
|
||||
}
|
||||
|
||||
QSslKey sslKey(&keyFile, QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, QByteArray("1234"));
|
||||
if(sslKey.isNull())
|
||||
{
|
||||
qDebug() << "Invalid key!";
|
||||
}
|
||||
|
||||
certFile.close();
|
||||
keyFile.close();
|
||||
sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
|
||||
sslConfiguration.setLocalCertificate(certificate);
|
||||
sslConfiguration.setPrivateKey(sslKey);
|
||||
sslConfiguration.setProtocol(QSsl::SecureProtocols);
|
||||
|
||||
*/
|
||||
/** --------- SocketServer --------- **/
|
||||
|
||||
m_pWebSocketServer = new QWebSocketServer(QStringLiteral("Community Login Server"), QWebSocketServer::NonSecureMode, this);
|
||||
|
||||
//m_pWebSocketServer->setSslConfiguration(sslConfiguration);
|
||||
|
||||
if (m_pWebSocketServer->listen(QHostAddress::LocalHost, port))
|
||||
{
|
||||
qDebug() << "SSL Echo Server listening on port" << port;
|
||||
connect(m_pWebSocketServer, &QWebSocketServer::newConnection, this, &AimberServer::onNewConnection);
|
||||
connect(m_pWebSocketServer, &QWebSocketServer::sslErrors, this, &AimberServer::onSslErrors);
|
||||
}
|
||||
|
||||
//community::Login Login;
|
||||
//Login.set_password("test");
|
||||
}
|
||||
|
||||
AimberServer::~AimberServer()
|
||||
{
|
||||
m_pWebSocketServer->close();
|
||||
qDeleteAll(m_clients.begin(), m_clients.end());
|
||||
}
|
||||
|
||||
void AimberServer::onNewConnection()
|
||||
{
|
||||
QWebSocket* pSocket = m_pWebSocketServer->nextPendingConnection();
|
||||
|
||||
qDebug() << "Client connected:" << pSocket->peerName() << pSocket->origin();
|
||||
|
||||
connect(pSocket, &QWebSocket::textMessageReceived, this, &AimberServer::processTextMessage);
|
||||
connect(pSocket, &QWebSocket::binaryMessageReceived, this, &AimberServer::processBinaryMessage);
|
||||
connect(pSocket, &QWebSocket::disconnected, this, &AimberServer::socketDisconnected);
|
||||
|
||||
m_clients << pSocket;
|
||||
}
|
||||
|
||||
void AimberServer::processTextMessage(QString message)
|
||||
{
|
||||
qDebug() << message;
|
||||
|
||||
//google::protobuf::MessageLite m;
|
||||
/*
|
||||
community::MessageContainer messageContainer;
|
||||
messageContainer.ParseFromString(message.toStdString());
|
||||
|
||||
for (const google::protobuf::Any& cmessage : messageContainer.message())
|
||||
{
|
||||
if (cmessage.Is<community::Login>())
|
||||
{
|
||||
//NetworkErrorDetails network_error;
|
||||
//detail.UnpackTo(&network_error);
|
||||
//... processing network_error ...
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
void AimberServer::processBinaryMessage(QByteArray message)
|
||||
{
|
||||
qDebug() << "Binary Message Received";
|
||||
}
|
||||
|
||||
void AimberServer::socketDisconnected()
|
||||
{
|
||||
qDebug() << "Client disconnected";
|
||||
QWebSocket* pClient = qobject_cast<QWebSocket*>(sender());
|
||||
|
||||
if (pClient)
|
||||
{
|
||||
m_clients.removeAll(pClient);
|
||||
pClient->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
void AimberServer::onSslErrors(const QList<QSslError>& errors)
|
||||
{
|
||||
qDebug() << "SSL errors occurred: \n";
|
||||
|
||||
for (int i = 0; i < errors.length(); ++i)
|
||||
{
|
||||
qDebug() << errors.at(i).errorString();
|
||||
}
|
||||
}
|
40
ScreenPlayServer/src/aimberserver.h
Normal file
40
ScreenPlayServer/src/aimberserver.h
Normal file
@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
#include <QList>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtNetwork/QSslCertificate>
|
||||
#include <QtNetwork/QSslError>
|
||||
#include <QtNetwork/QSslKey>
|
||||
#include <QtWebSockets/QWebSocketServer>
|
||||
#include <QtWebSockets/QWebSocket>
|
||||
//#include "Source/ProtocolBufferSub/GenCode/container.pb.h"
|
||||
//#include "Source/ProtocolBufferSub/GenCode/account.pb.h"
|
||||
|
||||
class AimberServer : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AimberServer(int port, QObject* parent = nullptr);
|
||||
~AimberServer();
|
||||
|
||||
signals:
|
||||
|
||||
private slots:
|
||||
void onNewConnection();
|
||||
void processTextMessage(QString message);
|
||||
void processBinaryMessage(QByteArray message);
|
||||
void socketDisconnected();
|
||||
void onSslErrors(const QList<QSslError>& errors);
|
||||
|
||||
public slots:
|
||||
|
||||
private:
|
||||
QWebSocketServer* m_pWebSocketServer = nullptr;
|
||||
QVector<QWebSocket*> m_clients;
|
||||
|
||||
};
|
Loading…
Reference in New Issue
Block a user