Skip to content
This repository has been archived by the owner on May 27, 2021. It is now read-only.

Better websocket error handling #100

Closed
bergice opened this issue Oct 16, 2020 · 0 comments
Closed

Better websocket error handling #100

bergice opened this issue Oct 16, 2020 · 0 comments

Comments

@bergice
Copy link

bergice commented Oct 16, 2020

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.

@bergice bergice closed this as completed Dec 8, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant