<feat: New release>

This commit is contained in:
Alessandro Autiero
2023-09-09 19:37:05 +02:00
parent 485e757e83
commit 64b85e4f6e
32 changed files with 586 additions and 223 deletions

View File

@@ -4,29 +4,75 @@ import 'dart:io';
import 'package:ini/ini.dart';
import 'package:reboot_common/common.dart';
import 'package:sync/semaphore.dart';
final matchmakerDirectory = Directory("${assetsDirectory.path}\\matchmaker");
final matchmakerStartExecutable = File("${matchmakerDirectory.path}\\fortmatchmaker.exe");
final matchmakerKillExecutable = File("${authenticatorDirectory.path}\\kill.bat");
final matchmakerConfigFile = File("${authenticatorDirectory.path}\\Config\\config.ini");
String? _lastIp;
String? _lastPort;
Semaphore _semaphore = Semaphore();
Future<int> startEmbeddedMatchmaker(bool detached) async => startBackgroundProcess(
executable: matchmakerStartExecutable,
window: detached
);
Future<void> writeMatchmakingIp(String text) async {
var file = File("${authenticatorDirectory}\\Config\\config.ini");
if(!file.existsSync()){
Stream<String?> watchMatchmakingIp() async* {
if(!matchmakerConfigFile.existsSync()){
return;
}
var observer = matchmakerConfigFile.parent.watch(events: FileSystemEvent.modify);
yield* observer.where((event) => event.path == matchmakerConfigFile.path).asyncMap((event) async {
try {
var config = Config.fromString(await matchmakerConfigFile.readAsString());
var ip = config.get("GameServer", "ip");
if(ip == null) {
return null;
}
var port = config.get("GameServer", "port");
if(port == null) {
return null;
}
if(_lastIp == ip && _lastPort == port) {
return null;
}
return port == kDefaultGameServerPort ? ip : "$ip:$port";
}finally {
try {
_semaphore.release();
} on StateError catch(_) {
// Intended behaviour
}
}
});
}
Future<void> writeMatchmakingIp(String text) async {
var exists = await matchmakerConfigFile.exists();
if(!exists) {
return;
}
_semaphore.acquire();
var splitIndex = text.indexOf(":");
var ip = splitIndex != -1 ? text.substring(0, splitIndex) : text;
var port = splitIndex != -1 ? text.substring(splitIndex + 1) : kDefaultGameServerPort;
var config = Config.fromString(file.readAsStringSync());
if(port.isBlank) {
port = kDefaultGameServerPort;
}
_lastIp = ip;
_lastPort = port;
var config = Config.fromString(await matchmakerConfigFile.readAsString());
config.set("GameServer", "ip", ip);
config.set("GameServer", "port", port);
file.writeAsStringSync(config.toString());
await matchmakerConfigFile.writeAsString(config.toString(), flush: true);
}
Future<bool> isMatchmakerPortFree() async => isPortFree(int.parse(kDefaultMatchmakerPort));
@@ -86,3 +132,18 @@ String? _getHostName(String host) => host.replaceFirst("ws://", "").replaceFirst
String? _getScheme(String host) => host.startsWith("ws://") ? "ws" : host.startsWith("wss://") ? "wss" : null;
extension StringExtension on String {
bool get isBlank {
if(isEmpty) {
return true;
}
for(var char in this.split("")) {
if(char != " ") {
return false;
}
}
return true;
}
}