seisatsu / DennisMUD

Dennis MUD - A multiplayer text adventure sandbox engine where the players build the world with in-game commands.
https://dennismud.xyz/
MIT License
47 stars 6 forks source link

Fix "attempt to send on a closed protocol" crash #109

Closed seisatsu closed 1 year ago

seisatsu commented 1 year ago

Unknown cause. Here is an example of it happening:


2022-10-09T15:42:40.686108-5000 [console:tcp4:220.136.88.23:57723#info] Occupants: demo, 123, test123456789, fukuda, vrinn, hollyora
2022-10-09T15:42:40.686512-5000 [console:tcp4:220.136.88.23:57723#info] Items: post-it note (0), painting (24), Numocha's note (32)
2022-10-09T15:42:40.686683-5000 [console:tcp4:220.136.88.23:57723#info] Exits: Mossy Wooden Door (0), Foggy Door (1), Sandstone Door (2), Workshop door (3), Fancy door (4), Woman's Domicile (5)
2022-10-09T15:42:48.540253-5000 [websocket#info] Client tcp4:220.136.88.23:57723 sending message: b'go Foggy Door'
2022-10-09T15:42:48.540329-5000 [console:tcp4:220.136.88.23:57723#info] > go Foggy Door
2022-10-09T15:42:48.540492-5000 [console:tcp4:220.136.88.23:57723#info] ====================
2022-10-09T15:42:48.550553-5000 [shell#info] hollyora left the room through Foggy Door.
2022-10-09T15:42:48.551276-5000 [websocket#error] Traceback (most recent call last):
  File "/var/www/dennismud.xyz/Dennis/lib/websocket.py", line 84, in onMessage
    self.factory.router.shell.command(self.factory.router[self.peer]["console"], payload.decode('utf-8'))
  File "/var/www/dennismud.xyz/Dennis/lib/shell.py", line 216, in command
    return self.call(console, ' '.join(line[:-splitpos]), line[-splitpos:])
  File "/var/www/dennismud.xyz/Dennis/lib/shell.py", line 451, in call
    return self._commands[command].COMMAND(console, args)
  File "/var/www/dennismud.xyz/Dennis/commands/go.py", line 153, in COMMAND
    console.shell.broadcast_room(console, "{0} left the room through {1}.".format(
  File "/var/www/dennismud.xyz/Dennis/lib/shell.py", line 393, in broadcast_room
    self.router.broadcast_room(console.user["room"], message, exclude)
  File "/var/www/dennismud.xyz/Dennis/server.py", line 202, in broadcast_room
    self.websocket_factory.communicate(self.users[u]["console"].rname, html.escape(msg).encode("utf-8"))
  File "/var/www/dennismud.xyz/Dennis/lib/websocket.py", line 120, in communicate
    client.sendMessage(message)
  File "/usr/local/lib/python3.9/dist-packages/autobahn/websocket/protocol.py", line 2275, in sendMessage
    raise Disconnected("Attempt to send on a closed protocol")
autobahn.exception.Disconnected: Attempt to send on a closed protocol```
seisatsu commented 1 year ago

This is ostensibly fixed in 7249bb342d1e03c3cb2dd428f2873b2e81ac3e71.