Add in more implementation

This commit is contained in:
zontreck 2024-05-24 13:48:21 -07:00
parent fc0c1c7e7a
commit 1b2ec0e74d
14 changed files with 62 additions and 35 deletions

View file

@ -35,7 +35,6 @@ void main() async {
print("Initializing SteamCMD");
await settings.initializeSteamCmd();
await settings.initializeSteamCmd2FA();
print("Initialized Steamcmd and Proton");
print("Checking for game server updates...");
@ -50,13 +49,20 @@ void main() async {
print(
"Aborting server startup procedure, initial server setup is not yet complete\n\n[ You must log in with the ServerManager to continue ]");
} else {
try {
print("Downloading mods...");
await doDownloadMods(false);
print("Scanning mods...");
settings.inst!.mods = await doScanMods();
settings.Write();
print("Starting scheduler...");
await settings.subsys.startScheduler();
} catch (E) {
settings.FTS = true;
settings.Write();
}
}
print("Starting up server manager server wrapper");

View file

@ -13,7 +13,10 @@ class CredentialsPrompt extends State<CredentialsPage> {
bool initialInitDone = false;
@override
void initState() {
void initState() {}
@override
void didChangeDependencies() {
final args = ModalRoute.of(context)!.settings.arguments as Credentials?;
if (args != null) {

View file

@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:servermanager/packets/ClientPackets.dart';
import 'package:servermanager/pages/Constants.dart';
import 'package:servermanager/structs/credentials.dart';
import 'package:servermanager/structs/settings.dart';
class HomePage extends StatefulWidget {
@ -93,9 +94,13 @@ class HomePageState extends State<HomePage> {
title: Text("Manager Credentials"),
subtitle: Text("Edit ServerManager credentials"),
leading: Icon(Icons.key),
onTap: () {
Navigator.pushNamed(context, "/creds",
onTap: () async {
var reply = await Navigator.pushNamed(context, "/creds",
arguments: settings.serverLoginCreds);
if (reply != null) {
Credentials creds = reply as Credentials;
settings.serverLoginCreds = creds;
}
},
),
ListTile(

View file

@ -23,7 +23,8 @@ Future<void> runProton(String command, List<String> argx) async {
args.addAll(argx);
ProcessResult res = await Process.run(
"proton", args, // Run arbitrary command with arguments
settings.getProtonExecutablePath(),
args, // Run arbitrary command with arguments
environment: env,
);
@ -54,10 +55,12 @@ Future<void> runDetachedProton(
List<String> args = ["run", command];
args.addAll(argx);
StateMachine.PROC = await Process.start(
"proton", args, // Run arbitrary command with arguments
StateMachine.PROC = await Process.start(settings.getProtonExecutablePath(),
args, // Run arbitrary command with arguments
environment: env,
workingDirectory: workingDir);
StateMachine.monitorProcess();
} catch (e) {
print('Error executing command: $e');
}

View file

@ -73,6 +73,21 @@ enum WarnIntervals {
class StateMachine {
static Process? PROC;
static Completer<void> DeadProcKillswitch = Completer();
void resetKillswitch() {
DeadProcKillswitch = Completer();
}
static Future<void> monitorProcess() async {
try {
int code = await PROC!.exitCode;
DeadProcKillswitch.complete();
} catch (E) {
DeadProcKillswitch.complete();
}
}
var _currentState = States.Inactive;
StreamController<States> _stateController = StreamController.broadcast();
Stream<States> get stateChanges => _stateController.stream;
@ -99,6 +114,7 @@ class StateMachine {
await doDownloadMods(false);
settings.inst!.mods = await doScanMods();
settings.Write();
await settings.writeOutModListFile();
@ -153,6 +169,8 @@ class StateMachine {
SessionData.timer = settings.inst!.timer.time.copy();
changeState(States.PreStart);
resetKillswitch();
// Schedule the server task
task = Timer.periodic(Duration(seconds: 1), (timer) {
switch (currentState) {
@ -201,6 +219,13 @@ class StateMachine {
if (SessionData.timer.getTotalSeconds() == 0) {
SessionData.shutdownPending = true;
}
// Check Dead Process
if (DeadProcKillswitch.isCompleted) {
// Switch state
changeState(States.FullStop); // This has the stop logic
}
break;
}
default:

View file

@ -1,5 +1,5 @@
import 'package:libac_flutter/nbt/impl/CompoundTag.dart';
import 'package:libac_flutter/nbt/impl/IntTag.dart';
import 'package:libac_flutter/nbt/impl/LongTag.dart';
import 'package:libac_flutter/nbt/impl/StringTag.dart';
import 'package:libac_flutter/utils/uuid/UUID.dart';
@ -29,7 +29,7 @@ class Mod {
CompoundTag serialize() {
CompoundTag tag = CompoundTag();
tag.put("name", StringTag.valueOf(mod_name));
tag.put("id", IntTag.valueOf(mod_id));
tag.put("id", LongTag.valueOf(mod_id));
tag.put("pak", StringTag.valueOf(mod_pak));
tag.put("hash", StringTag.valueOf(mod_hash));
@ -41,7 +41,7 @@ class Mod {
return Mod(
mod_name: ct.get("name")!.asString(),
mod_id: ct.get("id")!.asInt(),
mod_id: ct.get("id")!.asLong(),
mod_pak: ct.get("pak")!.asString(),
mod_hash: ct.get("hash")!.asString());
}

View file

@ -10,7 +10,6 @@ import 'package:libac_flutter/packets/packets.dart';
import 'package:libac_flutter/utils/IOTools.dart';
import 'package:libac_flutter/utils/uuid/NbtUUID.dart';
import 'package:libac_flutter/utils/uuid/UUID.dart';
import 'package:rcon/rcon.dart';
import 'package:servermanager/statemachine.dart';
import 'package:servermanager/structs/credentials.dart';
import 'package:servermanager/structs/mod.dart';
@ -274,11 +273,7 @@ class Settings {
}
Future<String> sendRconCommand(String command) async {
Client cli =
await Client.create("127.0.0.1", inst!.serverSettings.RconPort);
Message msg = Message.create(cli, PacketType.command, command);
return cli.send(msg).payload;
createSocket("127.0.0.1", port: inst!.serverSettings.RconPort);
}
Future<void> initializeProton() async {

View file

@ -6,10 +6,6 @@
#include "generated_plugin_registrant.h"
#include <file_selector_linux/file_selector_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
}

View file

@ -3,7 +3,6 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
file_selector_linux
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST

View file

@ -5,8 +5,6 @@
import FlutterMacOS
import Foundation
import file_selector_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
}

View file

@ -35,14 +35,13 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
file_selector:
archive:
dio:
crypto:
libac_flutter:
hosted: https://git.zontreck.com/api/packages/AriasCreations/pub/
version: 1.0.20
rcon: ^1.0.0
mc_rcon_dart: ^1.1.0
dev_dependencies:
flutter_test:

View file

@ -8,6 +8,8 @@ void main() {
settings.server = false;
settings.inst = SettingsEntry();
await settings.sendRconCommand("help");
var reply = await settings.sendRconCommand("help");
print(reply);
});
}

View file

@ -6,9 +6,6 @@
#include "generated_plugin_registrant.h"
#include <file_selector_windows/file_selector_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
}

View file

@ -3,7 +3,6 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
file_selector_windows
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST