Skip to content

Commit 98cc62c

Browse files
committed
🐛 "Socket Closed" error fixed
1 parent 8af565f commit 98cc62c

9 files changed

Lines changed: 90 additions & 49 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import org.apache.tools.ant.filters.ReplaceTokens
33
apply plugin: 'java'
44

55
group = 'fr.customentity'
6-
version = '0.2'
6+
version = '0.3'
77

88
sourceCompatibility = '1.8'
99
targetCompatibility = '1.8'

src/main/java/fr/customentity/advancedbungeequeue/bungee/socket/ServerThread.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
import fr.customentity.advancedbungeequeue.bungee.AdvancedBungeeQueue;
44
import fr.customentity.advancedbungeequeue.bungee.data.QueuedPlayer;
55
import fr.customentity.advancedbungeequeue.common.QueueResult;
6+
import fr.customentity.advancedbungeequeue.common.actions.Action;
7+
import fr.customentity.advancedbungeequeue.common.actions.PlayerAction;
8+
import fr.customentity.advancedbungeequeue.common.actions.all.ConfirmConnectionAction;
9+
import fr.customentity.advancedbungeequeue.common.actions.all.ExecuteCommandAction;
10+
import net.md_5.bungee.api.connection.ProxiedPlayer;
611

712
import java.io.IOException;
813
import java.io.InputStream;
@@ -29,19 +34,28 @@ public void run() {
2934

3035
String passwd = reader.readUTF();
3136
if(plugin.getConfigFile().getString("socket-password").equals(passwd)) {
32-
UUID uuid = UUID.fromString(reader.readUTF());
33-
QueueResult result = QueueResult.valueOf(reader.readUTF());
34-
Optional<QueuedPlayer> queuedPlayer = QueuedPlayer.get(uuid);
35-
if (result == QueueResult.ALLOWED) {
36-
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.getQueueManager().removePlayerFromQueue(queuedPlayer1));
37-
} else if(result == QueueResult.KICK_WHITELIST) {
38-
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-whitelisted"));
39-
} else if(result == QueueResult.KICK_FULL) {
40-
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-full-server"));
41-
}else if(result == QueueResult.KICK_BANNED) {
42-
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-banned"));
43-
} else if(result == QueueResult.KICK_OTHER) {
44-
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-unavailable-server"));
37+
Action<?> action = (Action<?>) reader.readObject();
38+
if (action instanceof PlayerAction) {
39+
if(action instanceof ConfirmConnectionAction) {
40+
ConfirmConnectionAction confirmConnectionAction = (ConfirmConnectionAction)action;
41+
QueueResult result = confirmConnectionAction.getQueueResult();
42+
Optional<QueuedPlayer> queuedPlayer = QueuedPlayer.get(confirmConnectionAction.getSenderUniqueId());
43+
if (result == QueueResult.ALLOWED) {
44+
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.getQueueManager().removePlayerFromQueue(queuedPlayer1));
45+
} else if (result == QueueResult.KICK_WHITELIST) {
46+
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-whitelisted"));
47+
} else if (result == QueueResult.KICK_FULL) {
48+
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-full-server"));
49+
} else if (result == QueueResult.KICK_BANNED) {
50+
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-banned"));
51+
} else if (result == QueueResult.KICK_OTHER) {
52+
queuedPlayer.ifPresent(queuedPlayer1 -> plugin.sendConfigMessage(queuedPlayer1.getProxiedPlayer(), "general.kick-unavailable-server"));
53+
}
54+
} else if(action instanceof ExecuteCommandAction) {
55+
ExecuteCommandAction executeCommandAction = (ExecuteCommandAction)action;
56+
ProxiedPlayer proxiedPlayer = plugin.getProxy().getPlayer(executeCommandAction.getSenderUniqueId());
57+
plugin.getProxy().getPluginManager().dispatchCommand(proxiedPlayer, executeCommandAction.getCommand());
58+
}
4559
}
4660
}
4761

@@ -50,7 +64,7 @@ public void run() {
5064
client.close();
5165

5266
this.interrupt();
53-
} catch (IOException e) {
67+
} catch (IOException | ClassNotFoundException e) {
5468
e.printStackTrace();
5569
}
5670
}

src/main/java/fr/customentity/advancedbungeequeue/bungee/socket/SocketManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.io.IOException;
66
import java.net.ServerSocket;
77
import java.net.Socket;
8+
import java.net.SocketException;
89
import java.util.logging.Level;
910

1011
public class SocketManager {
@@ -33,6 +34,7 @@ public void initListener() {
3334
}
3435

3536
} catch (IOException e) {
37+
if(e.getMessage().contains("Socket closed"))return;
3638
e.printStackTrace();
3739
}
3840
});

src/main/java/fr/customentity/advancedbungeequeue/common/actions/Action.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package fr.customentity.advancedbungeequeue.common.actions;
22

3-
public abstract class Action<T> {
3+
import java.io.Serializable;
4+
5+
public abstract class Action<T> implements Serializable {
46

57
public abstract Class<T> getEntryType();
68

src/main/java/fr/customentity/advancedbungeequeue/common/actions/PlayerAction.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
public abstract class PlayerAction extends Action<UUID> {
66

7-
private UUID uuid;
7+
private String uuid;
88

99
public PlayerAction(UUID uuid) {
10-
this.uuid = uuid;
10+
this.uuid = uuid.toString();
1111
}
1212

13-
public UUID getUniqueId() {
14-
return uuid;
13+
public UUID getSenderUniqueId() {
14+
return UUID.fromString(uuid);
1515
}
1616

1717
@Override
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package fr.customentity.advancedbungeequeue.common.actions.all;
2+
3+
import fr.customentity.advancedbungeequeue.common.QueueResult;
4+
import fr.customentity.advancedbungeequeue.common.actions.PlayerAction;
5+
6+
import java.io.Serializable;
7+
import java.util.UUID;
8+
9+
public class ConfirmConnectionAction extends PlayerAction {
10+
11+
private QueueResult queueResult;
12+
13+
public ConfirmConnectionAction(UUID uuid, QueueResult queueResult) {
14+
super(uuid);
15+
this.queueResult = queueResult;
16+
}
17+
18+
public QueueResult getQueueResult() {
19+
return queueResult;
20+
}
21+
}

src/main/java/fr/customentity/advancedbungeequeue/common/actions/all/JoinQueueAction.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/main/java/fr/customentity/advancedbungeequeue/spigot/AdvancedSpigotQueue.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public void onDisable() {
4141
@EventHandler
4242
public void onLogin(PlayerLoginEvent event) {
4343
Player player = event.getPlayer();
44-
this.socketManager.sendConnectedMessage(player.getUniqueId(), QueueResult.valueOf(event.getResult().name()));
44+
this.socketManager.sendConnectionConfirmation(player.getUniqueId(), QueueResult.valueOf(event.getResult().name()));
4545
}
4646

4747
public SocketManager getSocketManager() {
@@ -60,10 +60,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
6060
return true;
6161
}
6262
String serverName = args[1];
63-
ByteArrayDataOutput out = ByteStreams.newDataOutput();
64-
out.writeUTF("ExecuteCommand");
65-
out.writeUTF("queue join " + serverName);
66-
player.sendPluginMessage(this, "AdvancedBungeeQueue", out.toByteArray());
63+
this.socketManager.sendCommandToExecute(player.getUniqueId(), "queue join " + serverName);
6764
}
6865
}
6966
return false;

src/main/java/fr/customentity/advancedbungeequeue/spigot/SocketManager.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package fr.customentity.advancedbungeequeue.spigot;
22

33
import fr.customentity.advancedbungeequeue.common.QueueResult;
4-
import org.bukkit.event.player.PlayerLoginEvent;
4+
import fr.customentity.advancedbungeequeue.common.actions.all.ConfirmConnectionAction;
5+
import fr.customentity.advancedbungeequeue.common.actions.all.ExecuteCommandAction;
56

6-
import java.io.*;
7+
import java.io.IOException;
8+
import java.io.ObjectOutputStream;
9+
import java.io.OutputStream;
710
import java.net.ServerSocket;
811
import java.net.Socket;
912
import java.net.UnknownHostException;
@@ -19,16 +22,37 @@ public SocketManager(AdvancedSpigotQueue plugin) {
1922
this.plugin = plugin;
2023
}
2124

22-
public void sendConnectedMessage(UUID uuid, QueueResult result) {
25+
public void sendConnectionConfirmation(UUID uuid, QueueResult result) {
2326
Thread thread = new Thread(() -> {
2427
Socket client;
2528
try {
2629
client = new Socket("localhost", plugin.getConfig().getInt("socket-port"));
2730
OutputStream out = client.getOutputStream();
2831
ObjectOutputStream writer = new ObjectOutputStream(out);
2932
writer.writeUTF(plugin.getConfig().getString("socket-password", "TOABSOLUTELYCHANGE"));
30-
writer.writeUTF(uuid.toString());
31-
writer.writeUTF(result.name());
33+
writer.writeObject(new ConfirmConnectionAction(uuid, result));
34+
writer.flush();
35+
writer.close();
36+
client.close();
37+
} catch (UnknownHostException e) {
38+
plugin.getLogger().log(Level.SEVERE, "Failed to connect to the server.");
39+
e.printStackTrace();
40+
} catch (IOException e) {
41+
e.printStackTrace();
42+
}
43+
});
44+
thread.start();
45+
}
46+
47+
public void sendCommandToExecute(UUID uuid, String command) {
48+
Thread thread = new Thread(() -> {
49+
Socket client;
50+
try {
51+
client = new Socket("localhost", plugin.getConfig().getInt("socket-port"));
52+
OutputStream out = client.getOutputStream();
53+
ObjectOutputStream writer = new ObjectOutputStream(out);
54+
writer.writeUTF(plugin.getConfig().getString("socket-password", "TOABSOLUTELYCHANGE"));
55+
writer.writeObject(new ExecuteCommandAction(uuid, command));
3256
writer.flush();
3357
writer.close();
3458
client.close();

0 commit comments

Comments
 (0)