完成了OTA功能,为游戏增加了图标

This commit is contained in:
2026-06-20 18:30:27 +08:00
parent 5662ddf8f1
commit 26af2f9d11
22 changed files with 655 additions and 22 deletions
+26
View File
@@ -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") {
+5
View File
@@ -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;
};