BugVault/lib/server/main.dart

62 lines
1.7 KiB
Dart

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<DBUser> UserDB = List.empty();
static Future<void> InstantiateSettings(CompoundTag ct) async {
if (ct.containsKey("anonymous")) {
g_bAllowAnonymousLogin = NbtUtils.readBoolean(ct, "anonymous");
}
await _loadUserDB();
}
static Future<void> _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<void> 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<void> Register(PacketRegistry registry) async {
registry.register(C2SPacketLogin(), () {
return C2SPacketLogin();
});
registry.register(S2CLoginReply(), () {
return S2CLoginReply();
});
}
}