导航菜单

页面标题

页面副标题

Kreate v1.5.0 - KizzyRPC.java 源代码

正在查看: Kreate v1.5.0 应用的 KizzyRPC.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.my.kizzyrpc;

import android.util.Log;
import androidx.collection.ArrayMap;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.my.kizzyrpc.KizzyRPC;
import com.my.kizzyrpc.model.Activity;
import com.my.kizzyrpc.model.D;
import com.my.kizzyrpc.model.Data;
import com.my.kizzyrpc.model.HeartBeat;
import com.my.kizzyrpc.model.Identify;
import com.my.kizzyrpc.model.Properties;
import com.my.kizzyrpc.model.Resume;
import com.my.kizzyrpc.model.RichPresence;
import com.my.kizzyrpc.model.RichPresenceData;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import javax.net.ssl.SSLParameters;
import kotlin.Metadata;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.internal.Intrinsics;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;

@Metadata(d1 = {"\u0000V\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0006\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\t\n\u0002\b\u0004\u0018\u00002\u00020\u0001:\u0001%B\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\u0006\u0010\u0018\u001a\u00020\u0019J\b\u0010\u001a\u001a\u00020\u0019H\u0002J\u0006\u0010\u001b\u001a\u00020\u000eJ\u0006\u0010\u001c\u001a\u00020\u0019J\"\u0010\u001d\u001a\u00020\u00192\u0006\u0010\u001e\u001a\u00020\u001f2\b\b\u0002\u0010 \u001a\u00020\u00032\b\b\u0002\u0010!\u001a\u00020\"J\u0016\u0010#\u001a\u00020\u0019*\u0004\u0018\u00010\u00172\u0006\u0010$\u001a\u00020\u0001H\u0002R\u000e\u0010\u0005\u001a\u00020\u0006X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0007\u001a\u00020\bX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\t\u001a\u00020\nX\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u000b\u001a\u0004\u0018\u00010\fX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\r\u001a\u00020\u000eX\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u000f\u001a\u0004\u0018\u00010\u0010X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0011\u001a\u00020\bX\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0012\u001a\u0004\u0018\u00010\u0003X\u0082\u000e¢\u0006\u0002\n\u0000R\u001a\u0010\u0002\u001a\u00020\u0003X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0013\u0010\u0014\"\u0004\b\u0015\u0010\u0004R\u0010\u0010\u0016\u001a\u0004\u0018\u00010\u0017X\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006&"}, d2 = {"Lcom/my/kizzyrpc/KizzyRPC;", "", "token", "", "(Ljava/lang/String;)V", "gson", "Lcom/google/gson/Gson;", "heartbeatInterval", "", "heartbeatRunnable", "Ljava/lang/Runnable;", "heartbeatThr", "Ljava/lang/Thread;", "reconnectSession", "", "rpc", "Lcom/my/kizzyrpc/model/RichPresence;", "seq", "sessionId", "getToken", "()Ljava/lang/String;", "setToken", "webSocketClient", "Lorg/java_websocket/client/WebSocketClient;", "closeRPC", "", "createWebsocketClient", "isRpcRunning", "sendIdentify", "setActivity", "activity", "Lcom/my/kizzyrpc/model/Activity;", "status", "since", "", "send", "src", "Websocket", "KizzyRPC_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
public final class KizzyRPC {
    private Gson gson;
    private int heartbeatInterval;
    private Runnable heartbeatRunnable;
    private Thread heartbeatThr;
    private boolean reconnectSession;
    private RichPresence rpc;
    private int seq;
    private String sessionId;
    private String token;
    private WebSocketClient webSocketClient;

    public KizzyRPC(String str) {
        Intrinsics.checkNotNullParameter(str, "token");
        this.token = str;
        Gson create = new GsonBuilder().setPrettyPrinting().create();
        Intrinsics.checkNotNullExpressionValue(create, "GsonBuilder().setPrettyPrinting().create()");
        this.gson = create;
        this.heartbeatRunnable = new Runnable() {
            @Override
            public final void run() {
                KizzyRPC._init_$lambda$0(KizzyRPC.this);
            }
        };
    }

    public final String getToken() {
        return this.token;
    }

    public final void setToken(String str) {
        Intrinsics.checkNotNullParameter(str, "<set-?>");
        this.token = str;
    }

    public final void closeRPC() {
        Thread thread = this.heartbeatThr;
        if (thread != null) {
            Intrinsics.checkNotNull(thread);
            if (!thread.isInterrupted()) {
                Thread thread2 = this.heartbeatThr;
                Intrinsics.checkNotNull(thread2);
                thread2.interrupt();
            }
        }
        WebSocketClient webSocketClient = this.webSocketClient;
        if (webSocketClient != null) {
            Intrinsics.checkNotNull(webSocketClient);
            webSocketClient.close(1000);
        }
    }

    public final boolean isRpcRunning() {
        WebSocketClient webSocketClient = this.webSocketClient;
        return webSocketClient != null && webSocketClient.isOpen();
    }

    public static void setActivity$default(KizzyRPC kizzyRPC, Activity activity, String str, long j, int i, Object obj) {
        if ((i & 2) != 0) {
            str = "online";
        }
        if ((i & 4) != 0) {
            j = System.currentTimeMillis();
        }
        kizzyRPC.setActivity(activity, str, j);
    }

    public final void setActivity(Activity activity, String status, long since) {
        Intrinsics.checkNotNullParameter(activity, "activity");
        Intrinsics.checkNotNullParameter(status, "status");
        this.rpc = new RichPresence(new RichPresenceData(CollectionsKt.listOf(activity), false, Long.valueOf(since), status), 3);
        createWebsocketClient();
    }

    public final void sendIdentify() {
        Log.d("KizzyRPC", "sendIdentify() called");
        WebSocketClient webSocketClient = this.webSocketClient;
        Intrinsics.checkNotNull(webSocketClient);
        send(webSocketClient, new Identify(new Data(65, false, 100, new Properties("Discord Client", "disco", "Windows"), this.token), 2));
    }

    private final void createWebsocketClient() {
        try {
            Websocket websocket = new Websocket(this, new URI("wss://gateway.discord.gg/?encoding=json&v=10"), new ArrayMap());
            this.webSocketClient = websocket;
            Intrinsics.checkNotNull(websocket, "null cannot be cast to non-null type com.my.kizzyrpc.KizzyRPC.Websocket");
            websocket.connect();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    public static final void _init_$lambda$0(KizzyRPC kizzyRPC) {
        Intrinsics.checkNotNullParameter(kizzyRPC, "this$0");
        try {
            int i = kizzyRPC.heartbeatInterval;
            if (i < 10000) {
                throw new RuntimeException("invalid");
            }
            Thread.sleep(i);
            WebSocketClient webSocketClient = kizzyRPC.webSocketClient;
            int i2 = kizzyRPC.seq;
            kizzyRPC.send(webSocketClient, new HeartBeat(1, i2 == 0 ? "null" : String.valueOf(i2)));
        } catch (InterruptedException unused) {
        }
    }

    @Metadata(d1 = {"\u0000N\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\u000e\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\b\u0086\u0004\u0018\u00002\u00020\u0001B!\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0012\u0010\u0004\u001a\u000e\u0012\u0004\u0012\u00020\u0006\u0012\u0004\u0012\u00020\u00060\u0005¢\u0006\u0002\u0010\u0007J \u0010\t\u001a\u00020\n2\u0006\u0010\u000b\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\u00062\u0006\u0010\u000e\u001a\u00020\u000fH\u0016J\u0014\u0010\u0010\u001a\u00020\n2\n\u0010\u0011\u001a\u00060\u0012j\u0002`\u0013H\u0016J\u0010\u0010\u0014\u001a\u00020\n2\u0006\u0010\u0015\u001a\u00020\u0006H\u0016J\u0012\u0010\u0016\u001a\u00020\n2\b\u0010\u0017\u001a\u0004\u0018\u00010\u0018H\u0016J\u0010\u0010\u0019\u001a\u00020\n2\u0006\u0010\u001a\u001a\u00020\u001bH\u0014J\u0012\u0010\u001c\u001a\u00020\n2\b\u0010\u001d\u001a\u0004\u0018\u00010\u0006H\u0016R\u000e\u0010\b\u001a\u00020\u0006X\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006\u001e"}, d2 = {"Lcom/my/kizzyrpc/KizzyRPC$Websocket;", "Lorg/java_websocket/client/WebSocketClient;", "uri", "Ljava/net/URI;", "map", "Landroidx/collection/ArrayMap;", "", "(Lcom/my/kizzyrpc/KizzyRPC;Ljava/net/URI;Landroidx/collection/ArrayMap;)V", "gatewayResume", "onClose", "", "code", "", "reason", "remote", "", "onError", "e", "Ljava/lang/Exception;", "Lkotlin/Exception;", "onMessage", "message", "onOpen", "handshakedata", "Lorg/java_websocket/handshake/ServerHandshake;", "onSetSSLParameters", "p", "Ljavax/net/ssl/SSLParameters;", "send", "text", "KizzyRPC_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
    public final class Websocket extends WebSocketClient {
        private String gatewayResume;
        final KizzyRPC this$0;

        public Websocket(KizzyRPC kizzyRPC, URI uri, ArrayMap<String, String> arrayMap) {
            super(uri, arrayMap);
            Intrinsics.checkNotNullParameter(uri, "uri");
            Intrinsics.checkNotNullParameter(arrayMap, "map");
            this.this$0 = kizzyRPC;
            this.gatewayResume = "";
        }

        public void send(String text) {
            super.send(text);
            Log.d("KizzyRPC", "Sending message: " + text);
        }

        public void onOpen(ServerHandshake handshakedata) {
            Log.d("KizzyRPC", "WebSocket opened successfully with handshake data: " + handshakedata);
        }

        public void onMessage(String message) {
            Intrinsics.checkNotNullParameter(message, "message");
            Log.d("KizzyRPC", "Received message: " + message);
            android.util.ArrayMap arrayMap = (android.util.ArrayMap) this.this$0.gson.fromJson(message, new TypeToken<android.util.ArrayMap<String, Object>>() {
            }.getType());
            Double d = (Double) arrayMap.get("op");
            Intrinsics.checkNotNull(d);
            int doubleValue = (int) d.doubleValue();
            if (doubleValue == 0) {
                if (Intrinsics.areEqual((String) arrayMap.get("t"), "READY")) {
                    KizzyRPC kizzyRPC = this.this$0;
                    Map map = (Map) arrayMap.get("d");
                    Intrinsics.checkNotNull(map);
                    kizzyRPC.sessionId = String.valueOf(map.get("session_id"));
                    Map map2 = (Map) arrayMap.get("d");
                    Intrinsics.checkNotNull(map2);
                    this.gatewayResume = String.valueOf(map2.get("resume_gateway_url"));
                    Log.d("KizzyRPC", "Gateway URL updated to: " + this.gatewayResume);
                    Log.i("KizzyRPC", "Sending Activity...");
                    RichPresence richPresence = this.this$0.rpc;
                    if (richPresence != null) {
                        this.this$0.send(this, richPresence);
                        return;
                    }
                    return;
                }
                return;
            }
            if (doubleValue == 1) {
                if (!Thread.interrupted()) {
                    Log.d("KizzyRPC", "Interrupting Heartbeat thread");
                    Thread thread = this.this$0.heartbeatThr;
                    Intrinsics.checkNotNull(thread);
                    thread.interrupt();
                }
                this.this$0.send(this, new HeartBeat(1, this.this$0.seq == 0 ? "null" : String.valueOf(this.this$0.seq)));
                return;
            }
            if (doubleValue != 7) {
                switch (doubleValue) {
                    case 9:
                        Thread thread2 = this.this$0.heartbeatThr;
                        Intrinsics.checkNotNull(thread2);
                        if (!thread2.isInterrupted()) {
                            Log.d("KizzyRPC", "Reconnect Failed");
                            Thread thread3 = this.this$0.heartbeatThr;
                            Intrinsics.checkNotNull(thread3);
                            thread3.interrupt();
                            this.this$0.heartbeatThr = new Thread(this.this$0.heartbeatRunnable);
                            Thread thread4 = this.this$0.heartbeatThr;
                            Intrinsics.checkNotNull(thread4);
                            thread4.start();
                            this.this$0.sendIdentify();
                            break;
                        }
                        break;
                    case 10:
                        if (!this.this$0.reconnectSession) {
                            Map map3 = (Map) arrayMap.get("d");
                            KizzyRPC kizzyRPC2 = this.this$0;
                            Intrinsics.checkNotNull(map3);
                            Double d2 = (Double) map3.get("heartbeat_interval");
                            Intrinsics.checkNotNull(d2);
                            kizzyRPC2.heartbeatInterval = (int) d2.doubleValue();
                            Log.d("KizzyRPC", "Starting Heartbeat thread with interval: " + this.this$0.heartbeatInterval);
                            this.this$0.heartbeatThr = new Thread(this.this$0.heartbeatRunnable);
                            Thread thread5 = this.this$0.heartbeatThr;
                            Intrinsics.checkNotNull(thread5);
                            thread5.start();
                            this.this$0.sendIdentify();
                            break;
                        } else {
                            Log.d("KizzyRPC", "Sending Resume");
                            Map map4 = (Map) arrayMap.get("d");
                            KizzyRPC kizzyRPC3 = this.this$0;
                            Intrinsics.checkNotNull(map4);
                            Double d3 = (Double) map4.get("heartbeat_interval");
                            Intrinsics.checkNotNull(d3);
                            kizzyRPC3.heartbeatInterval = (int) d3.doubleValue();
                            Log.d("KizzyRPC", "Starting Heartbeat thread with interval: " + this.this$0.heartbeatInterval);
                            this.this$0.heartbeatThr = new Thread(this.this$0.heartbeatRunnable);
                            Thread thread6 = this.this$0.heartbeatThr;
                            Intrinsics.checkNotNull(thread6);
                            thread6.start();
                            this.this$0.reconnectSession = false;
                            KizzyRPC kizzyRPC4 = this.this$0;
                            kizzyRPC4.send(this, new Resume(new D(this.this$0.seq, this.this$0.sessionId, kizzyRPC4.getToken()), 6));
                            break;
                        }
                    case 11:
                        if (!Thread.interrupted()) {
                            Thread thread7 = this.this$0.heartbeatThr;
                            Intrinsics.checkNotNull(thread7);
                            thread7.interrupt();
                        }
                        this.this$0.heartbeatThr = new Thread(this.this$0.heartbeatRunnable);
                        Thread thread8 = this.this$0.heartbeatThr;
                        Intrinsics.checkNotNull(thread8);
                        thread8.start();
                        break;
                }
                return;
            }
            this.this$0.reconnectSession = true;
            Log.e("KizzyRPC", "Closing Session and Reconnecting");
            WebSocketClient webSocketClient = this.this$0.webSocketClient;
            Intrinsics.checkNotNull(webSocketClient);
            webSocketClient.close(4000);
        }

        public void onClose(int code, String reason, boolean remote) {
            Intrinsics.checkNotNullParameter(reason, "reason");
            Log.d("KizzyRPC", "Closed with: code = " + code + ", reason = " + reason + ", remote = " + remote);
            if (code == 4000) {
                this.this$0.reconnectSession = true;
                Thread thread = this.this$0.heartbeatThr;
                Intrinsics.checkNotNull(thread);
                thread.interrupt();
                Log.e("KizzyRPC", "Socket Closed");
                final KizzyRPC kizzyRPC = this.this$0;
                new Thread(new Runnable() {
                    @Override
                    public final void run() {
                        KizzyRPC.Websocket.onClose$lambda$1(KizzyRPC.this, this);
                    }
                }).start();
                return;
            }
            throw new RuntimeException("Invalid");
        }

        public static final void onClose$lambda$1(KizzyRPC kizzyRPC, Websocket websocket) {
            Intrinsics.checkNotNullParameter(kizzyRPC, "this$0");
            Intrinsics.checkNotNullParameter(websocket, "this$1");
            try {
                Thread.sleep(200L);
                kizzyRPC.webSocketClient = new Websocket(kizzyRPC, new URI(websocket.gatewayResume), new ArrayMap());
                WebSocketClient webSocketClient = kizzyRPC.webSocketClient;
                Intrinsics.checkNotNull(webSocketClient, "null cannot be cast to non-null type com.my.kizzyrpc.KizzyRPC.Websocket");
                ((Websocket) webSocketClient).connect();
            } catch (InterruptedException unused) {
            }
        }

        public void onError(Exception e) {
            Intrinsics.checkNotNullParameter(e, "e");
            Log.e("KizzyRPC", "onError() called with: e = " + e);
            if (Intrinsics.areEqual(e.getMessage(), "Interrupt")) {
                return;
            }
            this.this$0.closeRPC();
        }

        protected void onSetSSLParameters(SSLParameters p) {
            Intrinsics.checkNotNullParameter(p, "p");
            try {
                super.onSetSSLParameters(p);
            } catch (Throwable th) {
                th.printStackTrace();
            }
        }
    }

    public final void send(WebSocketClient webSocketClient, Object obj) {
        if (webSocketClient == null || !webSocketClient.isOpen()) {
            return;
        }
        webSocketClient.send(this.gson.toJson(obj));
    }
}