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..03c2ca7 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,9 @@ 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("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/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/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/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; +} 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..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 @@ -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; @@ -136,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/AbstractConstellationEvent.java b/src/main/java/com/mixer/api/resource/constellation/AbstractConstellationEvent.java index 210ab30..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,8 @@ 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; public abstract class AbstractConstellationEvent extends AbstractConstellationDatagram { @@ -13,7 +15,9 @@ 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), + @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..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 @@ -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,18 @@ 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.close(i); this.producer.notifyClose(i, s, b); }