Skip to content

Commit c55c38b

Browse files
committed
Fix server synchronization on reconnect
1 parent 9c4ec97 commit c55c38b

File tree

3 files changed

+29
-36
lines changed

3 files changed

+29
-36
lines changed

src/main/java/com/isnsest/denizen/velocity/DenizenConnection.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.isnsest.denizen.velocity;
22

3-
import com.isnsest.denizen.velocity.packets.out.AddServerPacketOut;
4-
import com.isnsest.denizen.velocity.packets.out.RemoveServerPacketOut;
3+
import com.isnsest.denizen.velocity.packets.in.*;
4+
import com.isnsest.denizen.velocity.packets.out.*;
55
import com.velocitypowered.api.event.proxy.ProxyPingEvent;
66
import com.velocitypowered.api.proxy.server.RegisteredServer;
77
import com.velocitypowered.api.proxy.server.ServerPing;
@@ -83,13 +83,17 @@ public synchronized void sendPacket(PacketOut packet) {
8383

8484
public void broadcastIdentity() {
8585
DenizenVelocity.instance.server.getScheduler().buildTask(DenizenVelocity.instance, () -> {
86-
if (thisServer != null) DenizenVelocity.instance.broadcastPacket(new AddServerPacketOut(thisServer.getServerInfo().getName()));
86+
if (thisServer != null) {
87+
DenizenVelocity.instance.broadcastPacket(new AddServerPacketOut(thisServer.getServerInfo().getName()));
88+
}
8789
}).schedule();
8890
}
8991

9092
public void broadcastRemoval() {
9193
DenizenVelocity.instance.server.getScheduler().buildTask(DenizenVelocity.instance, () -> {
92-
if (thisServer != null) DenizenVelocity.instance.broadcastPacket(new RemoveServerPacketOut(thisServer.getServerInfo().getName()));
94+
if (thisServer != null) {
95+
DenizenVelocity.instance.broadcastPacket(new RemoveServerPacketOut(thisServer.getServerInfo().getName()));
96+
}
9397
}).schedule();
9498
}
9599

@@ -136,7 +140,6 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) {
136140
if (DenizenVelocity.instance.packets.containsKey(id)) {
137141
packetBuffer.resetReaderIndex();
138142
handshakeFound = true;
139-
DenizenVelocity.instance.logger.info("Connected server: " + connectionName);
140143
break;
141144
} else {
142145
packetBuffer.resetReaderIndex();

src/main/java/com/isnsest/denizen/velocity/DenizenVelocity.java

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.velocitypowered.api.plugin.Plugin;
1414
import com.velocitypowered.api.plugin.annotation.DataDirectory;
1515
import com.velocitypowered.api.proxy.ProxyServer;
16-
import com.velocitypowered.api.proxy.server.RegisteredServer;
1716
import com.velocitypowered.api.proxy.server.ServerPing;
1817
import io.netty.bootstrap.ServerBootstrap;
1918
import io.netty.channel.ChannelFuture;
@@ -31,7 +30,7 @@
3130
import java.util.concurrent.CompletableFuture;
3231
import java.util.concurrent.TimeUnit;
3332

34-
@Plugin(id = "denizen-velocity", name = "denizen-velocity", version = "1.1", authors = {"isnsest"})
33+
@Plugin(id = "denizen-velocity", name = "denizen-velocity", version = "1.2", authors = {"isnsest"})
3534
public class DenizenVelocity {
3635

3736
public static DenizenVelocity instance;
@@ -41,8 +40,6 @@ public class DenizenVelocity {
4140
public static YamlConfig config;
4241

4342
private static int DEPENIZEN_PORT = 0;
44-
// public static boolean proxyCommandNoDup = false;
45-
// public static long proxyCommandId = 1;
4643

4744
public HashMap<Integer, PacketIn> packets = new HashMap<>();
4845
private final List<DenizenConnection> connections = new ArrayList<>();
@@ -140,32 +137,8 @@ private void startServer() {
140137
@Override
141138
public void initChannel(SocketChannel ch) {
142139
InetSocketAddress remoteAddress = ch.remoteAddress();
143-
String remoteIp = remoteAddress.getAddress().getHostAddress();
144-
145-
RegisteredServer matchedServer = null;
146-
for (RegisteredServer rs : server.getAllServers()) {
147-
String serverIp = rs.getServerInfo().getAddress().getAddress().getHostAddress();
148-
if (serverIp.equals(remoteIp)) {
149-
matchedServer = rs;
150-
break;
151-
}
152-
if ((remoteIp.equals("127.0.0.1") || remoteIp.equals("0:0:0:0:0:0:0:1"))
153-
&& (rs.getServerInfo().getAddress().getAddress().isLoopbackAddress())) {
154-
matchedServer = rs;
155-
break;
156-
}
157-
}
158-
159-
if (matchedServer == null) {
160-
logger.warn("BLOCKED connection from " + remoteIp);
161-
ch.close();
162-
return;
163-
}
164-
165-
logger.info("Accepted connection from " + remoteIp + " as server: " + matchedServer.getServerInfo().getName());
166140

167141
DenizenConnection depenConnection = new DenizenConnection();
168-
depenConnection.thisServer = matchedServer;
169142
depenConnection.build(ch, remoteAddress.getAddress());
170143
}
171144
});
@@ -241,7 +214,6 @@ public void onProxyPing(ProxyPingEvent event) {
241214
finalPing.version(finalVersion);
242215

243216
event.setPing(finalPing.build());
244-
245217
} catch (Exception e) {
246218
connection.proxyPingWaiters.remove(id);
247219
}
@@ -253,7 +225,9 @@ public void onProxyPing(ProxyPingEvent event) {
253225

254226
public void broadcastPacket(PacketOut packet) {
255227
for (DenizenConnection connection : getConnections()) {
256-
connection.sendPacket(packet);
228+
if (connection.thisServer != null) {
229+
connection.sendPacket(packet);
230+
}
257231
}
258232
}
259233
}

src/main/java/com/isnsest/denizen/velocity/packets/in/MyInfoPacketIn.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.isnsest.denizen.velocity.DenizenConnection;
44
import com.isnsest.denizen.velocity.DenizenVelocity;
55
import com.isnsest.denizen.velocity.PacketIn;
6+
import com.isnsest.denizen.velocity.packets.out.AddServerPacketOut;
67
import com.isnsest.denizen.velocity.packets.out.YourInfoPacketOut;
78
import com.velocitypowered.api.proxy.server.RegisteredServer;
89
import io.netty.buffer.ByteBuf;
@@ -38,7 +39,22 @@ public void process(DenizenConnection connection, ByteBuf data) {
3839
return;
3940
}
4041

41-
connection.sendPacket(new YourInfoPacketOut(connection.thisServer.getServerInfo().getName()));
42+
String serverName = connection.thisServer.getServerInfo().getName();
43+
44+
DenizenConnection existing = DenizenVelocity.instance.getConnectionByName(serverName);
45+
if (existing != null && existing != connection) {
46+
existing.fail("Replaced by new connection");
47+
}
48+
49+
connection.sendPacket(new YourInfoPacketOut(serverName));
50+
51+
for (DenizenConnection conn : DenizenVelocity.instance.getConnections()) {
52+
if (conn != connection && conn.thisServer != null) {
53+
connection.sendPacket(new AddServerPacketOut(conn.thisServer.getServerInfo().getName()));
54+
}
55+
}
56+
4257
connection.broadcastIdentity();
58+
DenizenVelocity.instance.logger.info("Connected server: " + connection.connectionName + " as: " + serverName);
4359
}
4460
}

0 commit comments

Comments
 (0)