import 'package:flutter/material.dart'; import 'package:libac_flutter/nbt/NbtUtils.dart'; import 'package:libac_flutter/packets/packets.dart'; import 'package:libac_flutter/utils/uuid/UUID.dart'; import 'package:servermanager/packets/ClientPackets.dart'; import 'package:servermanager/pages/Constants.dart'; import 'package:servermanager/pages/GameServerPage.dart'; import 'package:servermanager/pages/ModManager.dart'; import 'package:servermanager/pages/autorestart.dart'; import 'package:servermanager/pages/home.dart'; import 'package:servermanager/pages/steamcmd.dart'; import 'package:servermanager/structs/settings.dart'; import 'pages/Proton.dart'; import 'pages/ServerSettings.dart'; Future main() async { runApp(MyApp()); } class MyApp extends StatelessWidget { MyApp({super.key}); Settings appSettings = Settings(); @override Widget build(BuildContext context) { return MaterialApp( title: 'Server Manager', theme: ThemeData.dark(useMaterial3: true), routes: { "/": (context) => ServerPage(), "/home": (context) => HomePage(settings: appSettings), "/proton": (context) => Proton(settings: appSettings), "/steamcmd": (context) => SteamCMD( settings: appSettings, ), "/server": (context) => GameServerPage(settings: appSettings), "/server/autorestart": (context) => AutoRestartPage(), "/server/ports": (context) => ServerSettingsPage(), "/server/mods": (context) => ModManager(settings: appSettings), "/server/mods/edit": (context) => ModPage(), "/steamcmd/creds": (context) => CredentialsPrompt() }); } } class ServerPage extends StatelessWidget { TextEditingController serverIP = TextEditingController(); TextEditingController username = TextEditingController(); TextEditingController password = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Conan Exiles Server Manager - Login"), backgroundColor: Constants.TITLEBAR_COLOR, ), floatingActionButton: ElevatedButton( onPressed: () async { // Send login packet to server Settings settings = Settings(); settings.client = PacketClient(); await settings.client!.startConnect(serverIP.text); C2SLoginPacket login = C2SLoginPacket(); login.username = username.text; login.password = password.text; S2CResponse response = await settings.client!.send(login); bool valid = NbtUtils.readBoolean(response.contents, "valid"); if (valid) { settings.remoteLoginToken = UUID.parse(response.contents.get("token")!.asString()); Navigator.pushNamed(context, "/home"); } else { print("Login not valid"); } }, child: Text("Login"), ), body: SingleChildScrollView( child: Column( children: [ ListTile( title: Text("Server IP/FQDN"), subtitle: TextField( controller: serverIP, decoration: InputDecoration(hintText: "ex. 192.168.1.100"), ), ), ListTile( title: Text("Username"), subtitle: TextField( controller: username, decoration: InputDecoration(hintText: "the_user"), ), ), ListTile( title: Text("Password"), subtitle: TextField( controller: password, decoration: InputDecoration(hintText: "pass"), obscureText: true, ), ) ], ), )); } }