Catch all types of exceptions in recv thread. Should probably help with ghosts problem, though I have no idea which else kind of exception could arise there.
--- a/gameServer/ClientIO.hs Thu Jun 14 16:35:36 2012 +0400
+++ b/gameServer/ClientIO.hs Sun Jun 17 00:08:20 2012 +0400
@@ -48,6 +48,7 @@
listenLoop s chan ci >> return "Connection closed")
`Exception.catch` (\(e :: Exception.IOException) -> return . B.pack . show $ e)
`Exception.catch` (\(e :: ShutdownThreadException) -> return . B.pack . show $ e)
+ `Exception.catch` (\(e :: Exception.SomeException) -> return . B.pack . show $ e)
>>= clientOff >> remove
where
clientOff msg = writeChan chan $ ClientMessage (ci, ["QUIT", msg])