import 'dart:io'; import 'package:bugvault/dart/bugvault.dart'; import 'package:bugvault/server/packets.dart'; import 'package:bugvault/users/User.dart'; import 'package:libac_dart/nbt/NbtIo.dart'; import 'package:libac_dart/nbt/NbtUtils.dart'; import 'package:libac_dart/nbt/impl/CompoundTag.dart'; import 'package:libac_dart/nbt/impl/ListTag.dart'; import 'package:libac_dart/packets/packets.dart'; class BugVaultServer { static int get g_iPortNumber => ServerCommunicatorConstants.port; static bool g_bAllowAnonymousLogin = true; static List UserDB = List.empty(); static Future InstantiateSettings(CompoundTag ct) async { if (ct.containsKey("anonymous")) { g_bAllowAnonymousLogin = NbtUtils.readBoolean(ct, "anonymous"); } await _loadUserDB(); } static Future _loadUserDB() async { File users = File("users.dat"); if (await users.exists()) { CompoundTag ct = await NbtIo.read("users.dat") as CompoundTag; ListTag userList = ct.get("users")! as ListTag; for (var tag in userList.value) { CompoundTag userEntry = tag.asCompoundTag(); UserDB.add(DBUser.load(serialized: userEntry)); } } } static Future RegisterPacketHandlers() async { PacketRegistry registry = PacketRegistry(); BVSPacketImpl.Register(registry); } static DBUser? TryGetUser(String name) { for (var entry in UserDB) { if (entry.sName == name) { return entry; } } return null; } } class BVSPacketImpl { static Future Register(PacketRegistry registry) async { registry.register(C2SPacketLogin(), () { return C2SPacketLogin(); }); registry.register(S2CLoginReply(), () { return S2CLoginReply(); }); } }