-
Notifications
You must be signed in to change notification settings - Fork 0
/
NetworkManager.cpp
70 lines (57 loc) · 2.5 KB
/
NetworkManager.cpp
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
68
69
70
//
// Created by Parker on 2/23/2024.
// I don't have much experience in networking, so I just tried to set this up as best as I could figure out based on
// some resources online. I figure we'll tweak this later once the main game is working
//
#include "NetworkManager.h"
//Constructor for the NetworkManager class. Initializes the TCP socket and data stream
NetworkManager::NetworkManager(QObject *parent) :
QObject(parent), socket(new QTcpSocket(this)) {
setupSocketSignals();
in.setDevice(socket);
in.setVersion(QDataStream::Qt_5_10);
}
//Destructor ensures that the network connection is closed properly
NetworkManager::~NetworkManager() {
disconnectFromServer();
}
//Attempts to establish a connection to the server at the specified host and port
void NetworkManager::connectToServer(const QString &host, quint16 port) {
socket->connectToHost(host, port);
}
//Disconnects the socket from the server
void NetworkManager::disconnectFromServer() {
socket->disconnectFromHost();
}
//Sends the provided data to the server over the established connection
void NetworkManager::send(const QByteArray &data) {
if (socket->state() == QTcpSocket::ConnectedState) {
socket->write(data);
}
}
//Emits the connected signal when the socket connection is successfully established
void NetworkManager::onConnected() {
emit connected();
}
//Emits the disconnected signal when the socket has disconnected from the server
void NetworkManager::onDisconnected() {
emit disconnected();
}
//Reads all available data from the socket and emits the dataReceived signal
void NetworkManager::onReadyRead() {
QByteArray data = socket->readAll();
emit dataReceived(data);
}
//Emits the errorOccurred signal with the error message when a network error occurs
void NetworkManager::onErrorOccurred(QAbstractSocket::SocketError socketError) {
Q_UNUSED(socketError)
emit errorOccurred(socket->errorString());
}
//Private method to connect the QTcpSocket's signals to the NetworkManager's slots
void NetworkManager::setupSocketSignals() {
connect(socket, &QTcpSocket::connected, this, &NetworkManager::onConnected);
connect(socket, &QTcpSocket::disconnected, this, &NetworkManager::onDisconnected);
connect(socket, &QTcpSocket::readyRead, this, &NetworkManager::onReadyRead);
connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QTcpSocket::errorOccurred),
this, &NetworkManager::onErrorOccurred);
}