public Task GameLobbyLeaveGame(long gameLobbyID) { return(Task.Run(() => { var gameLobby = gameLobbyService.GetGameLobby(gameLobbyID); if (gameLobby == null) { return; } gameLobby.UseLobbyLock(() => { if (gameLobby.HasUser(Context.User)) { gameLobby.RemoveUser(Context.User, OnGameFinish, OnTurnTimeout); var playerLeaving = Context .User .ApiGetUser(); var host = gameLobby .GetHost() .ApiGetUser(); var players = gameLobby .GetUsers() .ApiGetUsers(); var apiObject = new GameLobbyLeaveGame { PlayerLeaving = playerLeaving, Host = host, Players = players }; var message = new GameLobbySendMessage { MessageType = GameLobbyMessageType.System, ChatMessage = new GetChatMessage(new ChatMessage { Message = $"{Context.User.GetUserName()} has left the game lobby", WhenCreated = DateTime.UtcNow }) }; if (gameLobby.GetUsers().Count <= 0) { gameLobbyService.RemoveGameLobby(gameLobbyID); var connection = userConnectionsService.GameConnectionService.GetConnection(Context.User); Clients.Client(connection).GameLobbyLeaveGame(apiObject); } else { foreach (var user in gameLobby.GetUsers()) { var connection = userConnectionsService.GameConnectionService.GetConnection(user); Clients.Client(connection).GameLobbyLeaveGame(apiObject); Clients.Client(connection).GameLobbySendMessage(message); } var userConnection = userConnectionsService.GameConnectionService.GetConnection(Context.User); Clients.Client(userConnection).GameLobbyLeaveGame(apiObject); } Context.User.SetCurrentGameLobbyID(null); } }); })); }
public static Task GameLobbyLeaveGame(this IClientProxy hubConnection, GameLobbyLeaveGame apiObject) { return(hubConnection.SendAsync(GameHubApiKeys.GameLobbyLeaveGame, apiObject)); }