From f975400d607ef3d02572571c216b9b6e43f6a58f Mon Sep 17 00:00:00 2001 From: MJRLegends Date: Mon, 30 Mar 2020 12:13:25 +0100 Subject: [PATCH 1/4] [Chat] Added support for the WelcomeEvent --- .../com/mixer/api/resource/chat/AbstractChatEvent.java | 3 ++- .../mixer/api/resource/chat/events/WelcomeEvent.java | 10 ++++++++++ .../resource/chat/events/data/WelcomeMessageData.java | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/mixer/api/resource/chat/events/WelcomeEvent.java create mode 100644 src/main/java/com/mixer/api/resource/chat/events/data/WelcomeMessageData.java diff --git a/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java b/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java index 0a9df78..5c0c6b3 100644 --- a/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java +++ b/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java @@ -20,7 +20,8 @@ public static enum EventType { @SerializedName("PollEnd") POLL_END (PollEndEvent.class), @SerializedName("Stats") STATS (StatusEvent.class), @SerializedName("UserJoin") USER_JOIN (UserJoinEvent.class), - @SerializedName("UserLeave") USER_LEAVE (UserLeaveEvent.class); + @SerializedName("UserLeave") USER_LEAVE (UserLeaveEvent.class), + @SerializedName("WelcomeEvent") WELCOME (WelcomeEvent.class); private final Class correspondingClass; diff --git a/src/main/java/com/mixer/api/resource/chat/events/WelcomeEvent.java b/src/main/java/com/mixer/api/resource/chat/events/WelcomeEvent.java new file mode 100644 index 0000000..5ee4f1a --- /dev/null +++ b/src/main/java/com/mixer/api/resource/chat/events/WelcomeEvent.java @@ -0,0 +1,10 @@ +package com.mixer.api.resource.chat.events; + +import com.mixer.api.resource.chat.AbstractChatEvent; +import com.mixer.api.resource.chat.events.data.WelcomeMessageData; + +public class WelcomeEvent extends AbstractChatEvent { + public WelcomeEvent() { + this.event = EventType.WELCOME; + } +} diff --git a/src/main/java/com/mixer/api/resource/chat/events/data/WelcomeMessageData.java b/src/main/java/com/mixer/api/resource/chat/events/data/WelcomeMessageData.java new file mode 100644 index 0000000..5647c1d --- /dev/null +++ b/src/main/java/com/mixer/api/resource/chat/events/data/WelcomeMessageData.java @@ -0,0 +1,7 @@ +package com.mixer.api.resource.chat.events.data; + +import com.mixer.api.resource.chat.AbstractChatEvent; + +public class WelcomeMessageData extends AbstractChatEvent.EventData { + public String server; +} From 7b62fdd6d9d2d3e1320107b031edecee91b805bb Mon Sep 17 00:00:00 2001 From: MJRLegends Date: Mon, 30 Mar 2020 12:14:00 +0100 Subject: [PATCH 2/4] [Constellation] Added support for the HelloEvent --- .../resource/constellation/AbstractConstellationEvent.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java b/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java index 210ab30..a32abfb 100644 --- a/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java +++ b/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java @@ -1,6 +1,7 @@ package com.mixer.api.resource.constellation; import com.google.gson.annotations.SerializedName; +import com.mixer.api.resource.constellation.events.HelloEvent; import com.mixer.api.resource.constellation.events.LiveEvent; public abstract class AbstractConstellationEvent extends AbstractConstellationDatagram { @@ -13,7 +14,8 @@ public AbstractConstellationEvent() { public static abstract class EventData {} public static enum EventType { - @SerializedName("live") LIVE (LiveEvent.class); + @SerializedName("live") LIVE (LiveEvent.class), + @SerializedName("hello") HELLO (HelloEvent.class), private final Class correspondingClass; From 26ab72e8cf6e502f7d08e53b6e57a951da4ed3de Mon Sep 17 00:00:00 2001 From: MJRLegends Date: Mon, 30 Mar 2020 12:15:31 +0100 Subject: [PATCH 3/4] [Chat/Constellation] Added a custom disconnect event to trigger on disconnect time --- .../api/resource/chat/AbstractChatEvent.java | 1 + .../chat/events/ChatDisconnectEvent.java | 10 ++++++++++ .../chat/events/data/ChatDisconnectData.java | 16 ++++++++++++++++ .../resource/chat/ws/MixerChatConnection.java | 2 ++ .../AbstractConstellationEvent.java | 2 ++ .../events/ConstellationDisconnectEvent.java | 10 ++++++++++ .../events/data/ConstellationDisconnectData.java | 15 +++++++++++++++ .../ws/MixerConstellationConnection.java | 13 +++++++++++++ 8 files changed, 69 insertions(+) create mode 100644 src/main/java/com/mixer/api/resource/chat/events/ChatDisconnectEvent.java create mode 100644 src/main/java/com/mixer/api/resource/chat/events/data/ChatDisconnectData.java create mode 100644 src/main/java/com/mixer/api/resource/constellation/events/ConstellationDisconnectEvent.java create mode 100644 src/main/java/com/mixer/api/resource/constellation/events/data/ConstellationDisconnectData.java diff --git a/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java b/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java index 5c0c6b3..03c2ca7 100644 --- a/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java +++ b/src/main/java/com/mixer/api/resource/chat/AbstractChatEvent.java @@ -21,6 +21,7 @@ public static enum EventType { @SerializedName("Stats") STATS (StatusEvent.class), @SerializedName("UserJoin") USER_JOIN (UserJoinEvent.class), @SerializedName("UserLeave") USER_LEAVE (UserLeaveEvent.class), + @SerializedName("disconnect") DISCOUNNECT (ChatDisconnectEvent.class), @SerializedName("WelcomeEvent") WELCOME (WelcomeEvent.class); private final Class correspondingClass; diff --git a/src/main/java/com/mixer/api/resource/chat/events/ChatDisconnectEvent.java b/src/main/java/com/mixer/api/resource/chat/events/ChatDisconnectEvent.java new file mode 100644 index 0000000..2c9aacc --- /dev/null +++ b/src/main/java/com/mixer/api/resource/chat/events/ChatDisconnectEvent.java @@ -0,0 +1,10 @@ +package com.mixer.api.resource.chat.events; + +import com.mixer.api.resource.chat.AbstractChatEvent; +import com.mixer.api.resource.chat.events.data.ChatDisconnectData; + +public class ChatDisconnectEvent extends AbstractChatEvent { + public ChatDisconnectEvent() { + this.event = EventType.DISCOUNNECT; + } +} diff --git a/src/main/java/com/mixer/api/resource/chat/events/data/ChatDisconnectData.java b/src/main/java/com/mixer/api/resource/chat/events/data/ChatDisconnectData.java new file mode 100644 index 0000000..b3e9cb7 --- /dev/null +++ b/src/main/java/com/mixer/api/resource/chat/events/data/ChatDisconnectData.java @@ -0,0 +1,16 @@ +package com.mixer.api.resource.chat.events.data; + +import com.mixer.api.resource.chat.AbstractChatEvent; + +public class ChatDisconnectData extends AbstractChatEvent.EventData { + public int code; + public String reason; + public boolean remote; + + public ChatDisconnectData(int code, String reason, boolean remote) { + super(); + this.code = code; + this.reason = reason; + this.remote = remote; + } +} diff --git a/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java b/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java index 03a869d..5686db8 100644 --- a/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java +++ b/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java @@ -3,6 +3,8 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; diff --git a/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java b/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java index a32abfb..926c8c9 100644 --- a/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java +++ b/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java @@ -1,6 +1,7 @@ package com.mixer.api.resource.constellation; import com.google.gson.annotations.SerializedName; +import com.mixer.api.resource.constellation.events.ConstellationDisconnectEvent; import com.mixer.api.resource.constellation.events.HelloEvent; import com.mixer.api.resource.constellation.events.LiveEvent; @@ -16,6 +17,7 @@ public static abstract class EventData {} public static enum EventType { @SerializedName("live") LIVE (LiveEvent.class), @SerializedName("hello") HELLO (HelloEvent.class), + @SerializedName("disconnect") DISCOUNNECT (ConstellationDisconnectEvent.class); private final Class correspondingClass; diff --git a/src/main/java/com/mixer/api/resource/constellation/events/ConstellationDisconnectEvent.java b/src/main/java/com/mixer/api/resource/constellation/events/ConstellationDisconnectEvent.java new file mode 100644 index 0000000..ed184ed --- /dev/null +++ b/src/main/java/com/mixer/api/resource/constellation/events/ConstellationDisconnectEvent.java @@ -0,0 +1,10 @@ +package com.mixer.api.resource.constellation.events; + +import com.mixer.api.resource.constellation.AbstractConstellationEvent; +import com.mixer.api.resource.constellation.events.data.ConstellationDisconnectData; + +public class ConstellationDisconnectEvent extends AbstractConstellationEvent { + public ConstellationDisconnectEvent() { + this.type = Type.EVENT; + } +} diff --git a/src/main/java/com/mixer/api/resource/constellation/events/data/ConstellationDisconnectData.java b/src/main/java/com/mixer/api/resource/constellation/events/data/ConstellationDisconnectData.java new file mode 100644 index 0000000..82cf61a --- /dev/null +++ b/src/main/java/com/mixer/api/resource/constellation/events/data/ConstellationDisconnectData.java @@ -0,0 +1,15 @@ +package com.mixer.api.resource.constellation.events.data; + +import com.mixer.api.resource.constellation.AbstractConstellationEvent; + +public class ConstellationDisconnectData extends AbstractConstellationEvent.EventData { + public int code; + public String reason; + public boolean remote; + public ConstellationDisconnectData(int code, String reason, boolean remote) { + super(); + this.code = code; + this.reason = reason; + this.remote = remote; + } +} diff --git a/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java b/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java index 515b154..b35e576 100644 --- a/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java +++ b/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java @@ -3,6 +3,8 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; @@ -122,6 +124,17 @@ public void onMessage(String s) { } @Override public void onClose(int i, String s, boolean b) { + Class type = AbstractConstellationEvent.EventType + .fromSerializedName("disconnect").getCorrespondingClass(); + Gson gson = null; + gson = new GsonBuilder().create(); + JsonObject obj = new JsonObject(); + obj.addProperty("code", i); + obj.addProperty("reason", s); + obj.addProperty("remote", b); + JsonObject json = new JsonObject(); + json.add("data", obj); + this.dispatchEvent(this.mixer.gson.fromJson(json, type)); this.producer.notifyClose(i, s, b); } From 46ab24008e1ce239eaea6ae81a14962d6c2c8f7d Mon Sep 17 00:00:00 2001 From: MJRLegends Date: Mon, 30 Mar 2020 12:16:01 +0100 Subject: [PATCH 4/4] [Chat/Constellation] Fixed a few websocket close issues --- .../java/com/mixer/api/resource/chat/ws/MixerChatConnection.java | 1 + .../resource/constellation/ws/MixerConstellationConnection.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java b/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java index 5686db8..158d1e2 100644 --- a/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java +++ b/src/main/java/com/mixer/api/resource/chat/ws/MixerChatConnection.java @@ -138,6 +138,7 @@ public void onMessage(String s) { } @Override public void onClose(int i, String s, boolean b) { + this.close(i); this.producer.notifyClose(i, s, b); } diff --git a/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java b/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java index b35e576..3ec625b 100644 --- a/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java +++ b/src/main/java/com/mixer/api/resource/constellation/ws/MixerConstellationConnection.java @@ -135,6 +135,7 @@ public void onMessage(String s) { JsonObject json = new JsonObject(); json.add("data", obj); this.dispatchEvent(this.mixer.gson.fromJson(json, type)); + this.close(i); this.producer.notifyClose(i, s, b); }