Socket Problem mit den WebSocket Antworten der Discord API

ileFix

Neues Mitglied
Ich bin gerade dabei, zu Testzwecken einen eigenen kleinen Discord-Client zu schreiben, der einfach alle eingehenden Nachrichten in der Konsole ausgibt. Zu diesem Zweck habe ich einen Websocket-Client eingerichtet:
[CODE lang="java" title="WebSocket Setup"]final WebSocketClientEndpoint clientEndPoint = new WebSocketClientEndpoint(new URI("wss://gateway.discord.gg/?v=9&encoding=json"), channel, dash);[/CODE]

Die Klasse WebScoketClientEndpoint sieht wie folgt aus:

[CODE lang="java" title="WebSocketClientEndpoint"]@ClientEndpoint
public class WebSocketClientEndpoint {

Session userSession = null;
private String dash;
private String channel;

public WebSocketClientEndpoint(URI endpointURI, String getChannel, String getDash) {
this.dash = getDash;
this.channel = getChannel;
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, endpointURI);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

}[/CODE]

Sobald der Websocket eingerichtet ist, sende ich eine entsprechende Authentifizierungsnachricht an Discord, die den Discord-Token enthält. Danach erhalte ich alle eingehenden Nachrichten.

Allerdings funktioniert das nur bei einem meiner Discord-Konten. Bei dem anderen bekomme ich nur CloseReason[1011,Buffer overflow.] zurück. Um dies zu verhindern, habe ich etwas an das Ende der URL angehängt, genau wie bei den Anfragen von der Discord-Website an den Server:

[CODE lang="java" title="Neue URL"]wss://gateway.discord.gg/?v=9&encoding=json&compress=zlib-stream[/CODE]

Damit erhalte ich auch Daten mit dem anderen Token. Allerdings ist dies ein Byte[] Nun habe ich alles wie folgt decodiert:

[CODE lang="java" title="ZLib Decoder"]@OnMessage
public void onMessage(byte[] message) {
String result = "";
try {
ByteArrayInputStream bais = new ByteArrayInputStream(message);
InflaterInputStream iis = new InflaterInputStream(bais);
byte[] buf = new byte[5];
int rlen = -1;
while ((rlen = iis.read(buf)) != -1) {
result += new String(Arrays.copyOf(buf, rlen));
}
} catch (IOException ignored) {
System.out.println(ignored);
}
System.out.println(result);
}[/CODE]

Dies funktioniert jedoch nur bei der ersten Nachricht. Bei allen weiteren tritt der Fehler auf:[CODE lang="java" title="ZLib Error"]java.util.zip.ZipException: incorrect header check[/CODE]

Hat jemand eine Idee, wie man die eingehende Nachricht in einen String umwandeln kann?
 

Zurück
Oben