Better websocket error handling
bergice opened this issue · 0 comments
bergice commented
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.