1 Commits
Author SHA1 Message Date
shmyga 347e20ab6b feat(app): add network game mode 2026-05-20 00:06:13 +03:00
2 changed files with 1 additions and 65 deletions
+1
View File
@@ -15,6 +15,7 @@ import ru.m.puzzlez.proto.pack.GameActionRequest;
import ru.m.puzzlez.proto.pack.GameCreateRequest; import ru.m.puzzlez.proto.pack.GameCreateRequest;
import ru.m.puzzlez.proto.pack.GameJoinRequest; import ru.m.puzzlez.proto.pack.GameJoinRequest;
import ru.m.puzzlez.proto.pack.GameLeaveRequest; import ru.m.puzzlez.proto.pack.GameLeaveRequest;
import ru.m.puzzlez.proto.pack.GameListRequest;
import ru.m.puzzlez.proto.pack.GameListResponse; import ru.m.puzzlez.proto.pack.GameListResponse;
import ru.m.puzzlez.proto.pack.NotificationResponse; import ru.m.puzzlez.proto.pack.NotificationResponse;
import ru.m.puzzlez.proto.pack.Request; import ru.m.puzzlez.proto.pack.Request;
@@ -1,65 +0,0 @@
package ru.m.puzzlez.net;
import hw.connect.IConnection;
import hw.signal.Signal;
import promhx.Deferred;
import promhx.Promise;
enum NetworkState {
CONNECT;
ACTIVE;
DISCONNECT;
ERROR(error:Dynamic);
}
class ReconnectTimer {
private var interval:Float;
private var lastConnected:Float;
private var lastActivity:Float;
private var lastError:Float;
private var next:Float;
public function new(interval:Float) {
this.interval = interval;
}
public function connect():Promise<Void> {
d = new Deferred();
d.resolve();
return d.promise();
}
public function onActivity() {}
public function onError() {}
}
class NetworkManager {
public var state(default, null):Signal<NetworkState>;
private var reconnectTimer:ReconnectTimer;
public function new(connection:IConnection<Dynamic, Dynamic>) {
this.reconnectTimer = new ReconnectTimer(5.0);
connection.handler.connect(onConnectionChange);
}
public function reconnect() {
return this.reconnectTimer.connect().then(() => {
state.emit(CONNECT);
connection.connect();
});
}
private function onConnectionChange(event:ConnectionEvent):Void {
switch event {
case CONNECTED:
state.emit(ACTIVE);
case DISCONNECTED:
state.emit(DISCONNECT);
case ERROR(error):
state.emit(ERROR(error));
this.reconnect();
}
}
}