From efd2acf642ddc2faa2d83ab798d0e6eb01e66ce5 Mon Sep 17 00:00:00 2001 From: alterdekim Date: Wed, 13 Mar 2024 19:07:37 +0300 Subject: [PATCH] LuaDeserializer --- .../javabot/components/BunkerBot.java | 6 +- .../javabot/util/LuaDeserializer.java | 110 ++++++++++++++++++ .../javabot/util/LuaSerializer.java | 14 +++ 3 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java diff --git a/src/main/java/com/alterdekim/javabot/components/BunkerBot.java b/src/main/java/com/alterdekim/javabot/components/BunkerBot.java index 622c6b9..89900fd 100644 --- a/src/main/java/com/alterdekim/javabot/components/BunkerBot.java +++ b/src/main/java/com/alterdekim/javabot/components/BunkerBot.java @@ -6,10 +6,7 @@ import com.alterdekim.javabot.Constants; import com.alterdekim.javabot.TelegramConfig; import com.alterdekim.javabot.entities.*; import com.alterdekim.javabot.service.*; -import com.alterdekim.javabot.util.BotUtils; -import com.alterdekim.javabot.util.GameState; -import com.alterdekim.javabot.util.HashUtils; -import com.alterdekim.javabot.util.LuaSerializer; +import com.alterdekim.javabot.util.*; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.luaj.vm2.Globals; @@ -261,6 +258,7 @@ public class BunkerBot extends TelegramLongPollingBot { globals.set("player", LuaSerializer.serializeObject(p)); LuaValue chunk = globals.load(script.getScriptBody()); chunk.call(); + players = LuaDeserializer.deserializePlayers(globals.get("players")); } private void processNightButton(CallbackQuery callbackQuery) { diff --git a/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java b/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java new file mode 100644 index 0000000..5b44c11 --- /dev/null +++ b/src/main/java/com/alterdekim/javabot/util/LuaDeserializer.java @@ -0,0 +1,110 @@ +package com.alterdekim.javabot.util; + +import com.alterdekim.javabot.bot.InfoSections; +import com.alterdekim.javabot.bot.Player; +import com.alterdekim.javabot.entities.*; +import lombok.extern.slf4j.Slf4j; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; +import org.springframework.security.core.parameters.P; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@Slf4j +public class LuaDeserializer { + public static List deserializePlayers(LuaValue val) { + LuaTable table = val.checktable(); + return Arrays.stream(table.keys()) + .map(key -> deserializePlayer(table.get(key).checktable())) + .collect(Collectors.toList()); + } + + private static Player deserializePlayer(LuaTable table) { + int age = table.get("age").checkint(); + Player p = new Player(table.get("telegramId").checklong(), table.get("name").checkjstring()); + p.setAge(age); + p.setIsAnswered(table.get("isAnswered").checkboolean()); + p.setFirstName(table.get("firstName").checkjstring()); + p.setIsVoted(table.get("isVoted").checkboolean()); + p.setScriptMessageId(table.get("scriptMessageId").checkint()); + + p.setGender(deserializeGender(table.get("gender").checktable())); + p.setHealth(deserializeHealth(table.get("health").checktable())); + p.setHobby(deserializeHobby(table.get("hobby").checktable())); + p.setWork(deserializeWork(table.get("work").checktable())); + p.setLuggage(deserializeLuggage(table.get("luggage").checktable())); + + p.setInfoSections(deserializeInfoSections(table.get("infoSections").checktable())); + return p; + } + + private static InfoSections deserializeInfoSections(LuaTable table) { + InfoSections infoSections = new InfoSections(); + infoSections.setIsGenderShowed(table.get("isGenderShowed").checkboolean()); + infoSections.setIsAgeShowed(table.get("isAgeShowed").checkboolean()); + infoSections.setIsWorkShowed(table.get("isWorkShowed").checkboolean()); + infoSections.setIsLuggageShowed(table.get("isLuggageShowed").checkboolean()); + infoSections.setIsHobbyShowed(table.get("isHobbyShowed").checkboolean()); + infoSections.setIsHealthShowed(table.get("isHealthShowed").checkboolean()); + return infoSections; + } + + private static Hobby deserializeHobby(LuaTable table) { + Hobby hobby = new Hobby(); + hobby.setId(table.get("id").checklong()); + hobby.setTextDescId(table.get("textDescId").checklong()); + hobby.setAsocial(table.get("asocial").tofloat()); + hobby.setPower(table.get("power").tofloat()); + hobby.setViolence(table.get("violence").tofloat()); + hobby.setFoodstuffs(table.get("foodstuffs").tofloat()); + return hobby; + } + + private static Work deserializeWork(LuaTable table) { + Work work = new Work(); + work.setId(table.get("id").checklong()); + work.setTextDescId(table.get("textDescId").checklong()); + work.setTextNameId(table.get("textNameId").checklong()); + work.setAsocial(table.get("asocial").tofloat()); + work.setPower(table.get("power").tofloat()); + work.setViolence(table.get("violence").tofloat()); + work.setFoodstuffs(table.get("foodstuffs").tofloat()); + return work; + } + + private static Luggage deserializeLuggage(LuaTable table) { + Luggage luggage = new Luggage(); + luggage.setId(table.get("id").checklong()); + luggage.setTextDescId(table.get("textDescId").checklong()); + luggage.setTextNameId(table.get("textNameId").checklong()); + luggage.setAsocial(table.get("asocial").tofloat()); + luggage.setPower(table.get("power").tofloat()); + luggage.setViolence(table.get("violence").tofloat()); + luggage.setFoodstuffs(table.get("foodstuffs").tofloat()); + luggage.setGarbage(table.get("garbage").checkboolean()); + return luggage; + } + + private static Health deserializeHealth(LuaTable table) { + Health health = new Health(); + health.setId(table.get("id").checklong()); + health.setHealth_index(table.get("health_index").tofloat()); + health.setIsChildfree(table.get("isChildfree").checkboolean()); + health.setTextDescId(table.get("textDescId").checklong()); + health.setTextNameId(table.get("textNameId").checklong()); + return health; + } + + private static Bio deserializeGender(LuaTable table) { + Bio bio = new Bio(); + bio.setId(table.get("id").checklong()); + bio.setGenderTextId(table.get("genderTextId").checklong()); + bio.setCanDie(table.get("canDie").checkboolean()); + bio.setIsMale(table.get("isMale").checkboolean()); + bio.setIsFemale(table.get("isFemale").checkboolean()); + return bio; + } +} diff --git a/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java b/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java index 055557a..e946dfd 100644 --- a/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java +++ b/src/main/java/com/alterdekim/javabot/util/LuaSerializer.java @@ -44,6 +44,18 @@ public class LuaSerializer { case "java.lang.Integer": map.put(name, ((Integer) f.get(o)).intValue()); break; + case "float": + map.put(name, f.getFloat(o)); + break; + case "java.lang.Float": + map.put(name, ((Float) f.get(o)).floatValue()); + break; + case "double": + map.put(name, f.getDouble(o)); + break; + case "java.lang.Double": + map.put(name, ((Double) f.get(o)).doubleValue()); + break; case "boolean": map.put(name, f.getBoolean(o)); break; @@ -53,6 +65,8 @@ public class LuaSerializer { case "java.lang.String": map.put(name, (String) f.get(o)); break; + case "java.util.List": + break; default: map.put(name, serializeObject(f.get(o))); break;