czyzby/gdx-lml

Better websocket error handling

bergice opened this issue · 0 comments

Version: 1.9.6
Platform: desktop


When there is an error when deserializing a packet, the packet fails silently without any warnings. This makes debugging VERY difficult!

Stack trace of where the error is caught, then redirected to (but that doesn't do anything):

handleCallbackError:173, WebSocketAdapter (com.neovisionaries.ws.client)
callHandleCallbackError:542, ListenerManager (com.neovisionaries.ws.client)
callOnBinaryMessage:372, ListenerManager (com.neovisionaries.ws.client)
callOnBinaryMessage:272, ReadingThread (com.neovisionaries.ws.client)
handleBinaryFrame:992, ReadingThread (com.neovisionaries.ws.client)
handleFrame:751, ReadingThread (com.neovisionaries.ws.client)
main:110, ReadingThread (com.neovisionaries.ws.client)
run:66, ReadingThread (com.neovisionaries.ws.client)

Stack trace of quiet error that crashes everything (happens if there is a NullPointerException when deserializing):

stackTrace = {StackTraceElement[33]@2228} 
 0 = {StackTraceElement@2230} "io.lurkers.game.rendering.ui.HealthBar$1.eventProcess(HealthBar.java:27)"
 1 = {StackTraceElement@2231} "io.lurkers.game.MessageListenerFiltered.event(MessageListenerFiltered.java:15)"
 2 = {StackTraceElement@2232} "io.lurkers.game.MessageQueue.notifyListeners(MessageQueue.java:143)"
 3 = {StackTraceElement@2233} "io.lurkers.game.MessageQueue.appendAndProcess(MessageQueue.java:62)"
 4 = {StackTraceElement@2234} "io.lurkers.game.MessageQueue.appendAndProcess(MessageQueue.java:58)"
 5 = {StackTraceElement@2235} "io.lurkers.game.entities.Entity.setHealth(Entity.java:195)"
 6 = {StackTraceElement@2236} "io.lurkers.game.entities.Entity.deserializeData(Entity.java:271)"
 7 = {StackTraceElement@2237} "io.lurkers.game.entities.PhysicalEntity.deserializeData(PhysicalEntity.java:179)"
 8 = {StackTraceElement@2238} "io.lurkers.game.entities.RectanglePhysicalEntity.deserializeData(RectanglePhysicalEntity.java:53)"
 9 = {StackTraceElement@2239} "io.lurkers.game.entities.Shop.deserializeData(Shop.java:22)"
 10 = {StackTraceElement@2240} "io.lurkers.game.entities.Entity.deserialize(Entity.java:250)"
 11 = {StackTraceElement@2241} "io.lurkers.game.entities.Entity.deserialize(Entity.java:24)"
 12 = {StackTraceElement@2242} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferable(Deserializer.java:626)"
 13 = {StackTraceElement@2243} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferableArray(Deserializer.java:660)"
 14 = {StackTraceElement@2244} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferableArray(Deserializer.java:638)"
 15 = {StackTraceElement@2245} "io.lurkers.game.Message.deserialize(Message.java:205)"
 16 = {StackTraceElement@2246} "io.lurkers.game.Message.deserialize(Message.java:13)"
 17 = {StackTraceElement@2247} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferable(Deserializer.java:626)"
 18 = {StackTraceElement@2248} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferableArray(Deserializer.java:660)"
 19 = {StackTraceElement@2249} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferableArray(Deserializer.java:638)"
 20 = {StackTraceElement@2250} "io.lurkers.game.Message.deserialize(Message.java:313)"
 21 = {StackTraceElement@2251} "io.lurkers.game.Message.deserialize(Message.java:13)"
 22 = {StackTraceElement@2252} "com.github.czyzby.websocket.serialization.impl.Deserializer.deserializeTransferable(Deserializer.java:626)"
 23 = {StackTraceElement@2253} "com.github.czyzby.websocket.serialization.impl.ManualSerializer.deserialize(ManualSerializer.java:84)"
 24 = {StackTraceElement@2254} "com.github.czyzby.websocket.AbstractWebSocketListener.onMessage(AbstractWebSocketListener.java:38)"
 25 = {StackTraceElement@2255} "com.github.czyzby.websocket.impl.AbstractWebSocket.postMessageEvent(AbstractWebSocket.java:98)"
 26 = {StackTraceElement@2256} "com.github.czyzby.websocket.impl.NvWebSocketListener.onBinaryMessage(NvWebSocketListener.java:65)"
 27 = {StackTraceElement@2257} "com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:368)"
 28 = {StackTraceElement@2258} "com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:272)"
 29 = {StackTraceElement@2259} "com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:992)"
 30 = {StackTraceElement@2260} "com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:751)"
 31 = {StackTraceElement@2261} "com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:110)"
 32 = {StackTraceElement@2262} "com.neovisionaries.ws.client.ReadingThread.run(ReadingThread.java:66)"

I've added error handling to WebSocketAdapter.onError(WebSocket webSocket, Throwable error) but it doesn't seem like the error ends up there for some reason.