From c379b8dea30b01f952af2f180fa76e398225d719 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 12 Nov 2023 16:03:53 -0800 Subject: [PATCH] Add basic game loop handling to the game server --- .../emu/lunarcore/game/player/Player.java | 8 ++++- .../emu/lunarcore/server/game/GameServer.java | 35 +++++++++++++++---- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/player/Player.java b/src/main/java/emu/lunarcore/game/player/Player.java index bea06cf..4b1ca26 100644 --- a/src/main/java/emu/lunarcore/game/player/Player.java +++ b/src/main/java/emu/lunarcore/game/player/Player.java @@ -530,6 +530,12 @@ public class Player { this.getSession().send(packet); } } + + public void onTick() { + + } + + // Database public void save() { if (this.uid <= 0) { @@ -570,7 +576,7 @@ public class Player { } } - // Proto + // Protobuf serialization public PlayerBasicInfo toProto() { var proto = PlayerBasicInfo.newInstance() diff --git a/src/main/java/emu/lunarcore/server/game/GameServer.java b/src/main/java/emu/lunarcore/server/game/GameServer.java index de24006..6cd6d97 100644 --- a/src/main/java/emu/lunarcore/server/game/GameServer.java +++ b/src/main/java/emu/lunarcore/server/game/GameServer.java @@ -3,6 +3,8 @@ package emu.lunarcore.server.game; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import emu.lunarcore.Config.GameServerConfig; import emu.lunarcore.LunarCore; @@ -18,20 +20,20 @@ import kcp.highway.KcpServer; import lombok.Getter; public class GameServer extends KcpServer { + private final InetSocketAddress address; private final GameServerConfig serverConfig; private final RegionInfo info; - private final InetSocketAddress address; - - @Getter - private final GameServerPacketHandler packetHandler; + private final Int2ObjectMap players; - + private final Timer gameLoopTimer; + // Managers + @Getter private final GameServerPacketHandler packetHandler; @Getter private final BattleService battleService; @Getter private final DropService dropService; @Getter private final InventoryService inventoryService; @Getter private final GachaService gachaService; - + public GameServer(GameServerConfig serverConfig) { // Game Server base this.serverConfig = serverConfig; @@ -46,6 +48,15 @@ public class GameServer extends KcpServer { this.dropService = new DropService(this); this.inventoryService = new InventoryService(this); this.gachaService = new GachaService(this); + + // Game loop + this.gameLoopTimer = new Timer(); + this.gameLoopTimer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + onTick(); + } + }, 0, 1000); // Hook into shutdown event. Runtime.getRuntime().addShutdownHook(new Thread(this::onShutdown)); @@ -97,6 +108,18 @@ public class GameServer extends KcpServer { // Done LunarCore.getLogger().info("Game Server started on " + address.getPort()); } + + private void onTick() { + synchronized (this.players) { + for (Player player : this.players.values()) { + try { + player.onTick(); + } catch (Exception e) { + LunarCore.getLogger().error("[UID: " + player.getUid() + "] Player tick error: ", e); + } + } + } + } private void onShutdown() { // Close server socket