public Task GameLobbyJoin(long gameLobbyID) { return(Task.Run(() => { var gameLobby = gameLobbyService.GetGameLobby(gameLobbyID); if (gameLobby == null) { return; } gameLobby.UseLobbyLock(() => { var userConnection = userConnectionsService.GameConnectionService.GetConnection(Context.User); var newUser = Context.User.ApiGetUser(); if (gameLobby.GetUsersCount() >= gameLobby.MaxRoomLimit) { Clients.Client(userConnection).GameLobbyJoin(null); return; } if (gameLobby.InGame()) { Clients.Client(userConnection).GameLobbyJoin(null); return; } else { if (!gameLobby.HasUser(Context.User)) { gameLobby.AddUser(Context.User); } var apiObject = new GameLobbyJoin { NewUser = newUser, GameLobby = gameLobby.ApiGetGameLobby() }; var message = new GameLobbySendMessage { MessageType = GameLobbyMessageType.System, ChatMessage = new GetChatMessage(new ChatMessage { User = null, Message = $"{newUser.Username} has joined the game lobby", WhenCreated = DateTime.UtcNow }) }; foreach (var user in gameLobby.GetUsers()) { var connection = userConnectionsService.GameConnectionService.GetConnection(user); Clients.Client(connection).GameLobbyJoin(apiObject); Clients.Client(connection).GameLobbySendMessage(message); } Context.User.SetCurrentGameLobbyID(gameLobbyID); } }); })); }
public static Task GameLobbyJoin(this IClientProxy hubConnection, GameLobbyJoin apiObject) { return(hubConnection.SendAsync(GameHubApiKeys.GameLobbyJoin, apiObject)); }