93 lines
2.3 KiB
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 {}
|
|
}
|