mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-16 08:56:04 +01:00
Merge branch 'api' into development
This commit is contained in:
@@ -103,8 +103,8 @@ public final class DispatchServer {
|
||||
byte[] decoded2 = Base64.getDecoder().decode(query_cur_region);
|
||||
QueryCurrRegionHttpRsp regionQuery = QueryCurrRegionHttpRsp.parseFrom(decoded2);
|
||||
|
||||
List<RegionSimpleInfo> servers = new ArrayList<RegionSimpleInfo>();
|
||||
List<String> usedNames = new ArrayList<String>(); // List to check for potential naming conflicts
|
||||
List<RegionSimpleInfo> servers = new ArrayList<>();
|
||||
List<String> usedNames = new ArrayList<>(); // List to check for potential naming conflicts
|
||||
if (Grasscutter.getConfig().RunMode.equalsIgnoreCase("HYBRID")) { // Automatically add the game server if in
|
||||
// hybrid mode
|
||||
RegionSimpleInfo server = RegionSimpleInfo.newBuilder()
|
||||
@@ -268,7 +268,10 @@ public final class DispatchServer {
|
||||
Grasscutter.getLogger()
|
||||
.info(String.format("[Dispatch] Client %s request: query_region_list", t.getRemoteAddress()));
|
||||
|
||||
responseHTML(t, regionListBase64);
|
||||
// Invoke event.
|
||||
QueryAllRegionsEvent event = new QueryAllRegionsEvent(regionListBase64); event.call();
|
||||
// Respond with event result.
|
||||
responseHTML(t, event.getRegionList());
|
||||
});
|
||||
|
||||
for (String regionName : regions.keySet()) {
|
||||
|
||||
@@ -10,6 +10,10 @@ public abstract class ServerEvent extends Event {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Type getServerType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public enum Type {
|
||||
DISPATCH,
|
||||
GAME
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package emu.grasscutter.server.event.game;
|
||||
|
||||
import emu.grasscutter.server.event.ServerEvent;
|
||||
|
||||
public final class ServerTickEvent extends ServerEvent {
|
||||
public ServerTickEvent() {
|
||||
super(Type.GAME);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package emu.grasscutter.server.event.internal;
|
||||
|
||||
import emu.grasscutter.server.event.ServerEvent;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public final class ServerStartEvent extends ServerEvent {
|
||||
private final OffsetDateTime startTime;
|
||||
|
||||
public ServerStartEvent(Type type, OffsetDateTime startTime) {
|
||||
super(type);
|
||||
|
||||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
public OffsetDateTime getStartTime() {
|
||||
return this.startTime;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package emu.grasscutter.server.event.internal;
|
||||
|
||||
import emu.grasscutter.server.event.ServerEvent;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public final class ServerStopEvent extends ServerEvent {
|
||||
private final OffsetDateTime stopTime;
|
||||
|
||||
public ServerStopEvent(Type type, OffsetDateTime stopTime) {
|
||||
super(type);
|
||||
|
||||
this.stopTime = stopTime;
|
||||
}
|
||||
|
||||
public OffsetDateTime getStopTime() {
|
||||
return this.stopTime;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package emu.grasscutter.server.game;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@@ -20,7 +21,10 @@ import emu.grasscutter.game.shop.ShopManager;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||
import emu.grasscutter.netty.MihoyoKcpServer;
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import emu.grasscutter.server.event.ServerEvent;
|
||||
import emu.grasscutter.server.event.game.ServerTickEvent;
|
||||
import emu.grasscutter.server.event.internal.ServerStartEvent;
|
||||
import emu.grasscutter.server.event.internal.ServerStopEvent;
|
||||
|
||||
public final class GameServer extends MihoyoKcpServer {
|
||||
private final InetSocketAddress address;
|
||||
@@ -36,18 +40,10 @@ public final class GameServer extends MihoyoKcpServer {
|
||||
private final MultiplayerManager multiplayerManager;
|
||||
private final DungeonManager dungeonManager;
|
||||
private final CommandMap commandMap;
|
||||
|
||||
public EventBus OnGameServerStartFinish;
|
||||
public EventBus OnGameServerTick;
|
||||
public EventBus OnGameServerStop;
|
||||
|
||||
public GameServer(InetSocketAddress address) {
|
||||
super(address);
|
||||
|
||||
OnGameServerStartFinish = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
||||
OnGameServerTick = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
||||
OnGameServerStop = EventBus.builder().throwSubscriberException(true).logNoSubscriberMessages(false).build();
|
||||
|
||||
this.setServerInitializer(new GameServerInitializer(this));
|
||||
this.address = address;
|
||||
this.packetHandler = new GameServerPacketHandler(PacketHandler.class);
|
||||
@@ -178,12 +174,8 @@ public final class GameServer extends MihoyoKcpServer {
|
||||
|
||||
world.onTick();
|
||||
}
|
||||
|
||||
for (GenshinPlayer player : this.getPlayers().values()) {
|
||||
player.onTick();
|
||||
}
|
||||
|
||||
OnGameServerTick.post(new GameServerTickEvent());
|
||||
|
||||
ServerTickEvent event = new ServerTickEvent(); event.call();
|
||||
}
|
||||
|
||||
public void registerWorld(World world) {
|
||||
@@ -198,12 +190,11 @@ public final class GameServer extends MihoyoKcpServer {
|
||||
@Override
|
||||
public void onStartFinish() {
|
||||
Grasscutter.getLogger().info("Game Server started on port " + address.getPort());
|
||||
|
||||
OnGameServerStartFinish.post(new GameServerStartFinishEvent());
|
||||
ServerStartEvent event = new ServerStartEvent(ServerEvent.Type.GAME, OffsetDateTime.now()); event.call();
|
||||
}
|
||||
|
||||
public void onServerShutdown() {
|
||||
OnGameServerStop.post(new GameServerStopEvent());
|
||||
ServerStopEvent event = new ServerStopEvent(ServerEvent.Type.GAME, OffsetDateTime.now()); event.call();
|
||||
|
||||
// Kick and save all players
|
||||
List<GenshinPlayer> list = new ArrayList<>(this.getPlayers().size());
|
||||
|
||||
Reference in New Issue
Block a user