blob: 31b3b961d516bddda0f321901afa87237fe23acc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package kr.syeyoung.dungeonsguide.mod.stomp;
import com.google.common.base.Throwables;
import kr.syeyoung.dungeonsguide.auth.AuthManager;
import kr.syeyoung.dungeonsguide.mod.events.impl.StompConnectedEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.net.URI;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class StompManager {
Logger logger = LogManager.getLogger("StompManager");
public static final String STOMP_URL = "wss://dungeons.guide/ws";
// private String stompURL = "ws://localhost/ws";
static StompManager instance;
public static StompManager getInstance() {
if (instance == null) {
instance = new StompManager();
MinecraftForge.EVENT_BUS.register(instance);
}
return instance;
}
public void init() {
connectStomp();
}
private StompClient stompConnection;
public boolean isStompConnected(){
if(stompConnection != null && stompConnection.getStompClientStatus() == StompClient.StompClientStatus.CONNECTED) return true;
return false;
}
public void send(StompPayload payload){
if(stompConnection != null){
stompConnection.sendfake(payload);
} else {
logger.error("OOPS STOMP CONNECTION IS NULL AND SOMEONE TRIED TO SEND SOMETHING THIS SHOULD NOT HAPPEN");
}
}
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
@SubscribeEvent
public void onStompDied(StompDiedEvent event) {
logger.info("Stomp Connection closed, trying to reconnect - {} - {}", event.reason, event.code);
connectStomp();
}
public void connectStomp() {
ex.schedule(() -> {
if (AuthManager.getInstance().getToken() == null) return;
try {
if (stompConnection != null) {
stompConnection.disconnect();
}
stompConnection = new StompClient(new URI(StompManager.STOMP_URL), AuthManager.getInstance().getToken());
MinecraftForge.EVENT_BUS.post(new StompConnectedEvent(stompConnection));
} catch (Exception e) {
logger.error("Failed to connect to Stomp with message: {}", String.valueOf(Throwables.getRootCause(e)));
}
}, 5L, TimeUnit.SECONDS);
}
}
|