Basic implementation of first login handshake
This commit is contained in:
parent
6ea48dd4e7
commit
88a7a0a9c6
8 changed files with 314 additions and 13 deletions
61
lib/server/main.dart
Normal file
61
lib/server/main.dart
Normal file
|
@ -0,0 +1,61 @@
|
|||
import 'dart:io';
|
||||
|
||||
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 g_iPortNumber = 8372;
|
||||
static bool g_bAllowAnonymousLogin = true;
|
||||
static List<DBUser> UserDB = List.empty();
|
||||
|
||||
static Future<void> InstantiateSettings(CompoundTag ct) async {
|
||||
g_iPortNumber = ct.get("port")?.asInt() ?? 8372;
|
||||
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();
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue