feat: синхронизация порта сокет сервера

This commit is contained in:
Reider745
2024-01-08 12:52:03 +03:00
parent 10c4cdc895
commit c731b1b662
5 changed files with 55 additions and 8 deletions
@@ -15,6 +15,7 @@ import com.reider745.item.CustomItem;
import com.reider745.item.ItemMethod;
import com.reider745.item.NukkitIdConvertor;
import com.reider745.network.InnerCorePacket;
import com.reider745.world.DimensionsMethods;
import com.zhekasmirnov.apparatus.mcpe.NativeWorkbench;
import com.zhekasmirnov.apparatus.multiplayer.Network;
@@ -226,6 +227,20 @@ public class InnerCoreServer {
config.setDefaultPort(singleton.getPropertyInt("socket-port", config.getDefaultPort()));
config.setSocketConnectionAllowed(singleton.getPropertyBoolean("socket-server-enable", config.isSocketConnectionAllowed()));
JSONObject json = new JSONObject();
json.put("server", true);
json.put("socket_port", config.getDefaultPort());
InnerCorePacket packet = new InnerCorePacket();
packet.name = "system.server_detection";
packet.format_id = 0;
byte[] bytes = json.toString().getBytes();
packet.bytes_length = bytes.length;
packet.bytes = bytes;
packet.encode();
InnerCorePacket.sendInfo = packet;
final File innerCoreDirectory = new File(dataPath, "innercore");
if (!innerCoreDirectory.exists()) {
server.getLogger().info("Extracting internal package...");
@@ -284,9 +299,6 @@ public class InnerCoreServer {
Network.getSingleton().addServerInitializationPacket("server_fixed.inventory", (client) -> object, (v, v1) -> {
// legacy inner core for mod ServerFixed
});
Network.getSingleton().addServerInitializationPacket("system.dedicated_server", (client) -> object, (v, v1) -> {
// for new inner core
});
NativeCallback.onLocalServerStarted();
WorldDataSaverHandler.getInstance().fetchParamsFromConfig();
@@ -328,8 +328,6 @@ public class EventListener implements Listener {
// TODO: onBlockEventEntityStepOn
// TODO: onBlockEventNeighbourChange
// TODO: onItemUsedNoTarget (not only custom items)
// TODO: onItemUseReleased (not only custom items)
@@ -8,12 +8,15 @@ import cn.nukkit.network.protocol.DataPacket;
import cn.nukkit.utils.BinaryStream;
import cn.nukkit.utils.MainLogger;
import cn.nukkit.utils.VarInt;
import com.reider745.InnerCoreServer;
import com.reider745.Main;
import com.reider745.api.hooks.HookClass;
import com.reider745.api.hooks.TypeHook;
import com.reider745.api.hooks.annotation.Inject;
import com.reider745.api.hooks.annotation.Hooks;
import com.reider745.network.BasePacket;
import com.reider745.network.InnerCorePacket;
import java.io.ByteArrayInputStream;
import java.net.ProtocolException;
import java.util.Collection;
@@ -66,7 +69,13 @@ public class NetworkHooks implements HookClass {
packetId = header & 0x3FF;
break;
}
log.debug("read packet: " + packetId);
// 1 - the very first package
if(packetId == 1)
player.dataPacket(InnerCorePacket.sendInfo);
if(InnerCoreServer.isDebugInnerCoreNetwork())
System.out.println("Batch packet: "+packetId);
DataPacket pk = self.getPacket(packetId);
if (pk != null) {
@@ -1,11 +1,15 @@
package com.reider745.hooks;
import cn.nukkit.Player;
import cn.nukkit.Server;
import cn.nukkit.lang.TextContainer;
import cn.nukkit.network.protocol.DataPacket;
import com.reider745.InnerCoreServer;
import com.reider745.api.hooks.HookClass;
import com.reider745.api.hooks.TypeHook;
import com.reider745.api.hooks.annotation.Inject;
import com.reider745.api.hooks.annotation.Hooks;
import com.reider745.network.InnerCorePacket;
import com.zhekasmirnov.apparatus.multiplayer.Network;
import com.zhekasmirnov.apparatus.multiplayer.server.ConnectedClient;
import java.util.List;
@@ -44,6 +48,7 @@ public class PlayerHooks implements HookClass {
@Inject
public static void close(Player player, TextContainer message, String reason, boolean notify) {
InnerCorePacket.closePlayer(player);
ConnectedClient client = getForPlayer(player);
try {
if (client != null)
@@ -51,4 +56,10 @@ public class PlayerHooks implements HookClass {
} catch (Exception ignore) {
}
}
@Inject
public static void dataPacket(Player self, DataPacket packet){
if(InnerCoreServer.isDebugInnerCoreNetwork())
System.out.println("Send packet: "+packet.pid());
}
}
@@ -2,10 +2,17 @@ package com.reider745.network;
import cn.nukkit.Player;
import cn.nukkit.Server;
import cn.nukkit.network.Network;
import cn.nukkit.network.protocol.BatchPacket;
import com.zhekasmirnov.apparatus.mcpe.NativeNetworking;
import com.zhekasmirnov.horizon.runtime.logger.Logger;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.EmptyByteBuf;
import io.netty.buffer.PooledByteBufAllocator;
import io.netty.buffer.SwappedByteBuf;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.HashMap;
public class InnerCorePacket extends BasePacket {
@@ -41,11 +48,13 @@ public class InnerCorePacket extends BasePacket {
}
}
public static InnerCorePacket sendInfo;
public void reciveLogic(){
try{
InetSocketAddress address = this.player.getSocketAddress();
final InetSocketAddress address = this.player.getSocketAddress();
final String client = address.getAddress().toString();
String client = address.getAddress().toString();
addressHashMap.put(client, address);
playerHashMap.put(client, player);
@@ -56,6 +65,14 @@ public class InnerCorePacket extends BasePacket {
}
}
public static void closePlayer(Player player){
final InetSocketAddress address = player.getSocketAddress();
final String client = address.getAddress().toString();
addressHashMap.remove(client);
playerHashMap.remove(client);
}
@Override
public void encode() {
isEncoded = true;