ConanServerManager/lib/packets/ClientPackets.dart

93 lines
2.3 KiB
Dart

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 {}
}