完成了OTA功能,为游戏增加了图标
This commit is contained in:
@@ -13,10 +13,20 @@ NetworkManager::NetworkManager(QObject* parent)
|
||||
emit binaryFrameReceived(msg);
|
||||
});
|
||||
connect(&_heartbeatTimer, &QTimer::timeout, this, &NetworkManager::onHeartbeat);
|
||||
_reconnectTimer.setSingleShot(true);
|
||||
connect(&_reconnectTimer, &QTimer::timeout, this, [this]() {
|
||||
if (!_autoReconnect || _serverUrl.isEmpty()) return;
|
||||
_reconnectAttempts++;
|
||||
emit reconnecting(_reconnectAttempts, 10);
|
||||
_socket.open(QUrl(_serverUrl));
|
||||
});
|
||||
}
|
||||
|
||||
void NetworkManager::connectToServer(const QString& url) {
|
||||
_serverUrl = url;
|
||||
_autoReconnect = true;
|
||||
_reconnectAttempts = 0;
|
||||
_reconnectTimer.stop();
|
||||
_socket.open(QUrl(url));
|
||||
}
|
||||
|
||||
@@ -25,6 +35,14 @@ void NetworkManager::disconnect() {
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
void NetworkManager::disconnectPermanent() {
|
||||
_autoReconnect = false;
|
||||
_reconnectTimer.stop();
|
||||
_reconnectAttempts = 0;
|
||||
_heartbeatTimer.stop();
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
bool NetworkManager::isConnected() const {
|
||||
return _socket.state() == QAbstractSocket::ConnectedState;
|
||||
}
|
||||
@@ -103,6 +121,8 @@ void NetworkManager::sendBinaryFrame(const QByteArray& data) {
|
||||
}
|
||||
|
||||
void NetworkManager::onConnected() {
|
||||
_reconnectAttempts = 0;
|
||||
_reconnectTimer.stop();
|
||||
_heartbeatTimer.start(15000);
|
||||
emit connected();
|
||||
}
|
||||
@@ -110,6 +130,10 @@ void NetworkManager::onConnected() {
|
||||
void NetworkManager::onDisconnected() {
|
||||
_heartbeatTimer.stop();
|
||||
emit disconnected();
|
||||
if (_autoReconnect && _reconnectAttempts < 10 && !_serverUrl.isEmpty()) {
|
||||
int delay = qMin(3000 + _reconnectAttempts * 2000, 20000);
|
||||
_reconnectTimer.start(delay);
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkManager::onTextMessageReceived(const QString& message) {
|
||||
@@ -167,6 +191,8 @@ void NetworkManager::handleServerMessage(const QJsonObject& msg) {
|
||||
emit settlementResult(payload);
|
||||
} else if (type == "game_log") {
|
||||
emit gameLogReceived(payload["text"].toString());
|
||||
} else if (type == "player_disconnected" || type == "player_bot_takeover") {
|
||||
emit gameLogReceived(payload["message"].toString());
|
||||
} else if (type == "login_result") {
|
||||
emit loginResult(payload);
|
||||
} else if (type == "register_result") {
|
||||
|
||||
@@ -18,6 +18,7 @@ public:
|
||||
|
||||
void connectToServer(const QString& url);
|
||||
void disconnect();
|
||||
void disconnectPermanent();
|
||||
bool isConnected() const;
|
||||
|
||||
void sendMessage(const QString& type, const QJsonObject& payload = {});
|
||||
@@ -38,6 +39,7 @@ signals:
|
||||
void connected();
|
||||
void disconnected();
|
||||
void connectionError(const QString& error);
|
||||
void reconnecting(int attempt, int maxAttempts);
|
||||
|
||||
void roomStateUpdated(const QJsonObject& roomState);
|
||||
void gameStarted(const QJsonObject& initConfig);
|
||||
@@ -77,7 +79,10 @@ private:
|
||||
|
||||
QWebSocket _socket;
|
||||
QTimer _heartbeatTimer;
|
||||
QTimer _reconnectTimer;
|
||||
int _seqNum = 0;
|
||||
int _reconnectAttempts = 0;
|
||||
bool _autoReconnect = false;
|
||||
QString _serverUrl;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user