public void BroadcastMessage(GameMessage message) { var deadUsers = new List <User>(); lock (gameState) { foreach (var user in gameState.Users) { try { user.Callback.Notify(message); } catch (CommunicationException e) { // assume that client is down. we can't logof it now - deadlock LogSaver.Log(e.Message); deadUsers.Add(user); } catch (Exception e) { LogSaver.Log("FAIL!! mysterious callback exception: " + e.Message); } } } // logoff all deadUsers foreach (var deadUser in deadUsers) { LogSaver.Log("User " + deadUser.Id + " is dead. Logoff"); RoomControll.DeleteOnlineUser(deadUser); } }
public void Logoff(Guid token) { var user = RoomControll.GetUserByToken(token); LogSaver.Log("Logoff userId=" + user.Id); RoomControll.DeleteOnlineUser(user); }