-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathmain.cpp
More file actions
67 lines (53 loc) · 2.36 KB
/
main.cpp
File metadata and controls
67 lines (53 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "reactorserver.hpp"
#include "tcpconnection.hpp"
#include <QCoreApplication>
#include <QDebug>
#include <QThread>
auto main(int argc, char *argv[]) -> int
{
QCoreApplication app(argc, argv);
auto getFormattedThreadId = []() {
return QString("%1").arg(reinterpret_cast<quint64>(QThread::currentThreadId()),
5,
10,
QLatin1Char('0'));
};
ReactorServer server(8080, 4);
// 设置Echo服务器回调
ConnectionCallbacks callbacks;
// 然后在回调中使用:
callbacks.onDataReceived = [getFormattedThreadId](TcpConnection *conn, const QByteArray &data) {
auto message = QString::fromUtf8(data);
qDebug() << QString("Thread %1 - Received from %2: %3")
.arg(getFormattedThreadId(), conn->clientInfo(), message);
conn->write(data); // Echo back
if (message == "::quit" || message == "::shutdown") {
qInfo() << "Received shutdown command from" << conn->clientInfo();
QMetaObject::invokeMethod(qApp, &QCoreApplication::quit, Qt::QueuedConnection);
conn->write("\nServer shutting down...\n");
return;
}
};
callbacks.onErrorOccurred = [getFormattedThreadId](TcpConnection *conn,
QAbstractSocket::SocketError socketError) {
qWarning() << QString("Thread %1 - Client %2, Error: %3, Error String: %4")
.arg(getFormattedThreadId(),
conn->clientInfo(),
QString::number(socketError),
conn->errorString());
};
callbacks.onConnected = [getFormattedThreadId](TcpConnection *conn) {
qDebug() << QString("Thread %1 - Client connected: %2")
.arg(getFormattedThreadId(), conn->clientInfo());
};
callbacks.onDisconnected = [getFormattedThreadId](TcpConnection *conn) {
qDebug() << QString("Thread %1 - Client disconnected: %2")
.arg(getFormattedThreadId(), conn->clientInfo());
};
server.setCallbacks(callbacks);
QObject::connect(&server, &ReactorServer::message, [](const QString &msg) {
qDebug() << "[SERVER]" << msg;
});
server.start();
return app.exec();
}