Ejemplo n.º 1
0
        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);
                        }
                    }
                });
            }));
        }
Ejemplo n.º 2
0
        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);
                    }
                });
            }));
        }
Ejemplo n.º 3
0
        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));
 }