Start implementing server-side functionality.

This commit is contained in:
zontreck 2024-05-22 20:47:52 -07:00
parent 2b6a265b74
commit 6fadb92a26
8 changed files with 147 additions and 5 deletions

View file

@ -0,0 +1,93 @@
import 'dart:convert';
import 'package:libac_flutter/nbt/NbtUtils.dart';
import 'package:libac_flutter/nbt/Tag.dart';
import 'package:libac_flutter/nbt/impl/CompoundTag.dart';
import 'package:libac_flutter/nbt/impl/StringTag.dart';
import 'package:libac_flutter/packets/packets.dart';
import 'package:libac_flutter/utils/uuid/NbtUUID.dart';
import 'package:libac_flutter/utils/uuid/UUID.dart';
import 'package:servermanager/settings.dart';
class ClientPackets {
static void register() {
PacketRegistry reg = PacketRegistry();
reg.register(C2SLoginPacket(), () {
return C2SLoginPacket();
});
}
}
class C2SLoginPacket implements IPacket {
String username = "";
String password = "";
@override
void decodeJson(String params) {
fromJson(json.decode(params));
}
@override
void decodeTag(Tag tag) {
CompoundTag ct = tag.asCompoundTag();
username = ct.get("username")!.asString();
password = ct.get("password")!.asString();
}
@override
NetworkDirection direction() {
return NetworkDirection.ClientToServer;
}
@override
String encodeJson() {
return json.encode(toJson());
}
@override
Tag encodeTag() {
CompoundTag tag = CompoundTag();
tag.put("username", StringTag.valueOf(username));
tag.put("password", StringTag.valueOf(password));
return tag;
}
@override
void fromJson(Map<String, dynamic> js) {
username = js['username'] as String;
password = js['password'] as String;
}
@override
String getChannelID() {
return "Login";
}
@override
Future<PacketResponse> handleServerPacket() async {
S2CResponse response = S2CResponse();
// Attempt to log in.
Settings settings = Settings();
if (settings.serverLoginCreds.username == username &&
settings.serverLoginCreds.password == password) {
NbtUtils.writeBoolean(response.contents, "valid", true);
settings.remoteLoginToken = UUID.generate(4);
NbtUtils.writeUUID(response.contents, "token",
NbtUUID.fromUUID(settings.remoteLoginToken));
} else {
NbtUtils.writeBoolean(response.contents, "valid", false);
}
return PacketResponse(replyDataTag: response.encodeTag().asCompoundTag());
}
@override
Map<String, dynamic> toJson() {
return {"username": username, "password": password};
}
@override
Future<void> handleClientPacket() async {}
}