public Task GameLobbySendMessage(string message, long gameLobbyID) { return(Task.Run(() => { var gameLobby = gameLobbyService.GetGameLobby(gameLobbyID); if (gameLobby == null) { return; } gameLobby.UseLobbyLock(() => { if (gameLobby.HasUser(Context.User)) { ChatMessage chatMessage = new ChatMessage { User = Context.User, Message = message, WhenCreated = DateTime.UtcNow }; var apiObject = new GameLobbySendMessage { MessageType = GameLobbyMessageType.User, ChatMessage = chatMessage.ApiGetChatMessage() }; foreach (var participant in gameLobby.GetUsers()) { var connection = userConnectionsService.GameConnectionService.GetConnection(participant); Clients.Client(connection).GameLobbySendMessage(apiObject); } } }); })); }
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 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 GameLobbySendMessage(this IClientProxy hubConnection, GameLobbySendMessage apiObject) { return(hubConnection.SendAsync(GameHubApiKeys.GameLobbySendMessage, apiObject)); }