@@ -122,13 +122,13 @@ public class OBSCommunicator {
122
122
private boolean debug ;
123
123
private final String password ;
124
124
private final CountDownLatch closeLatch ;
125
- public final Map <String , Class > messageTypes = new HashMap <>();
125
+ public final Map <String , Class <? extends ResponseBase > > messageTypes = new HashMap <>();
126
126
127
- private final Map <Class , Callback > callbacks = new HashMap <>();
127
+ private final Map <Class <? extends ResponseBase > , Callback > callbacks = new HashMap <>();
128
128
129
129
private Session session ;
130
130
131
- private Gson gson ;
131
+ private final Gson gson ;
132
132
133
133
private Callback <GetVersionResponse > onConnect ;
134
134
private VoidCallback onDisconnect ;
@@ -215,38 +215,41 @@ public void onMessage(String msg) {
215
215
}
216
216
217
217
try {
218
- if (this .gson .fromJson (msg , JsonObject .class ).has ("message-id" )) {
219
- // Response
220
- ResponseBase responseBase = this .gson .fromJson (msg , ResponseBase .class );
221
- Class type = messageTypes .get (responseBase .getMessageId ());
222
- log .trace (String .format ("Trying to deserialize response with type %s and message '%s'" , type , msg ));
223
- responseBase = (ResponseBase ) this .gson .fromJson (msg , type );
224
-
225
- try {
226
- processIncomingResponse (responseBase , type );
218
+ JsonElement jsonElement = JsonParser .parseString (msg );
219
+ if (jsonElement .isJsonObject ()) {
220
+ JsonObject jsonObject = jsonElement .getAsJsonObject ();
221
+
222
+ if (jsonObject .has ("message-id" )) {
223
+ Class <? extends ResponseBase > responseType = messageTypes .get (jsonObject .get ("message-id" ).getAsString ());
224
+ log .trace (String .format ("Trying to deserialize response with type %s and message '%s'" , responseType , msg ));
225
+ // Response
226
+ ResponseBase responseBase = this .gson .fromJson (jsonObject , responseType );
227
+
228
+ try {
229
+ processIncomingResponse (responseBase , responseType );
230
+ }
231
+ catch (Throwable t ) {
232
+ runOnError ("Failed to process response '" + responseType .getSimpleName () + "' from websocket" , t );
233
+ }
227
234
}
228
- catch (Throwable t ) {
229
- runOnError ("Failed to process response '" + type .getSimpleName () + "' from websocket" , t );
235
+ else if (jsonObject .has ("update-type" )) {
236
+ try {
237
+ EventType eventType = EventType .valueOf (jsonObject .get ("update-type" ).getAsString ());
238
+
239
+ try {
240
+ processIncomingEvent (msg , eventType );
241
+ }
242
+ catch (Throwable t ) {
243
+ runOnError ("Failed to execute callback for event: " + eventType , t );
244
+ }
245
+ }
246
+ catch (IllegalArgumentException ignored ) {
247
+ log .trace ("Unsupported Event received" );
248
+ }
230
249
}
231
-
232
250
}
233
251
else {
234
- JsonElement elem = JsonParser .parseString (msg );
235
- EventType eventType ;
236
-
237
- try {
238
- eventType = EventType .valueOf (elem .getAsJsonObject ().get ("update-type" ).getAsString ());
239
- }
240
- catch (Throwable t ) {
241
- return ;
242
- }
243
-
244
- try {
245
- processIncomingEvent (msg , eventType );
246
- }
247
- catch (Throwable t ) {
248
- runOnError ("Failed to execute callback for event: " + eventType , t );
249
- }
252
+ throw new IllegalArgumentException ("Received message is not a JsonObject" );
250
253
}
251
254
}
252
255
catch (Throwable t ) {
0 commit comments