aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java
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);
    }
}