Example #1
0
        public static void OnDisconnect(Dictionary <int, object> paramDictionary)
        {
            PlayerSession playerSession = null;

            if (paramDictionary.ContainsKey(NetworkObjectParameters.PlayerSession))
            {
                playerSession = (PlayerSession)paramDictionary[NetworkObjectParameters.PlayerSession];
            }

            if (playerSession == null)
            {
                return;
            }

            lock (NetworkObjectParameters.GameServerInformation)
                NetworkObjectParameters.GameServerInformation.ConnectedClients = Math.Max(0, NetworkObjectParameters.GameServerInformation.ConnectedClients - 1);

            //Remove player from game files
            if (playerSession.Player != null)
            {
                lock (GameServerObjects.Instance.PlayerHashtable)
                {
                    if (GameServerObjects.Instance.PlayerHashtable.ContainsKey(playerSession.Player.ID))
                    {
                        GameServerObjects.Instance.PlayerHashtable.Remove(playerSession.Player.ID);
                    }

                    Console.WriteLine($"- {playerSession.Player.Nickname} is now disconnected from the game server.");
                }
            }

            //Disconnects from any connected chat
            GameClientProvider.GameServerChatLeave(playerSession);

            //Remove player from loading screen & start match (if necessary)
            if (playerSession.Player.PlayerNavigation == PlayerNavigation.InLoadingScreen)
            {
                GameClientProvider.GameServerRoomRequestDisconnect(playerSession);
            }

            //Remove player from match
            if (playerSession.Player.PlayerNavigation == PlayerNavigation.InGame)
            {
                GameClientProvider.GameServerInGameRequestDisconnect(playerSession);
            }

            //Remove player from room
            if (playerSession.RoomMetadata != null)
            {
                GameClientProvider.GameServerRoomLeaveRoom(playerSession);
            }
        }
Example #2
0
        public static void GameServiceHUB(ExtendedConcurrentQueue <byte[]> provider, string[] request, Dictionary <int, object> paramDictionary)
        {
            int    service;
            object answer = null;

            service = (request != null) ? int.Parse(request[0])
                : NetworkObjectParameters.ServerProcessingError;

            PlayerSession playerSession = null;

            if (paramDictionary.ContainsKey(NetworkObjectParameters.PlayerSession))
            {
                playerSession = (PlayerSession)paramDictionary[NetworkObjectParameters.PlayerSession];
            }

            switch (service)
            {
            // Server Information
            case NetworkObjectParameters.GameServerMetadataRequest:
                answer = NetworkObjectParameters.GameServerInformation;
                break;

            // Connection
            case NetworkObjectParameters.GameServerPlayerAccessRequest:
                answer = GameClientProvider.GameServerPlayerAccessRequest(request[1], paramDictionary, provider);
                break;

            // Server Information Request
            case NetworkObjectParameters.GameServerSearchPlayer:
                GameClientProvider.GameServerSearchPlayer(request[1]);
                break;

            // Game List / Requests
            case NetworkObjectParameters.GameServerRoomListCreateRoom:
                answer = GameClientProvider.GameServerRoomListCreateRoom(request[1], playerSession);
                break;

            case NetworkObjectParameters.GameServerRoomListRequestList:
                GameClientProvider.GameServerRoomListRequestList(request[1], provider);
                return;

            case NetworkObjectParameters.GameServerRoomListRoomEnter:
                answer = GameClientProvider.GameServerRoomListRoomEnter(request[1], playerSession);
                break;

            // Game Room / Requests
            case NetworkObjectParameters.GameServerRoomLeaveRoom:
                answer = GameClientProvider.GameServerRoomLeaveRoom(playerSession);
                break;

            case NetworkObjectParameters.GameServerRoomReadyRoom:
                GameClientProvider.GameServerRoomReadyRoom(playerSession);
                return;

            case NetworkObjectParameters.GameServerRoomChangePrimaryMobile:
                GameClientProvider.GameServerRoomChangePrimaryMobile(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerRoomChangeTeam:
                GameClientProvider.GameServerRoomChangeTeam(playerSession);
                return;

            case NetworkObjectParameters.GameServerRoomChangeMap:
                GameClientProvider.GameServerRoomChangeMap(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerRoomRefreshLoadingPercentage:
                GameClientProvider.GameServerRoomRefreshLoadingPercentage(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerRoomStartInGameScene:
                GameClientProvider.GameServerRoomStartInGameScene(playerSession);
                return;

            // InGame / Requests
            case NetworkObjectParameters.GameServerInGameStartMatch:
                GameClientProvider.GameServerInGameStartMatch(playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRefreshSyncMobile:
                GameClientProvider.GameServerInGameRefreshSyncMobile(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRequestNextPlayerTurn:
                answer = GameClientProvider.GameServerInGameRequestNextPlayerTurn(playerSession);
                break;

            case NetworkObjectParameters.GameServerInGameRequestShot:
                GameClientProvider.GameServerInGameRequestShot(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRequestDeath:
                GameClientProvider.GameServerInGameRequestDeath(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRequestItemUsage:
                GameClientProvider.GameServerInGameRequestItemUsage(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRequestDamage:
                GameClientProvider.GameServerInGameRequestDamage(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerInGameRequestLoseTurn:
                GameClientProvider.GameServerInGameRequestLoseTurn(request[1], playerSession);
                return;

            // Messaging / Room List Chat Requests
            case NetworkObjectParameters.GameServerChatEnter:
                GameClientProvider.GameServerChatEnterRequest(request[1], playerSession);
                return;

            case NetworkObjectParameters.GameServerChatLeave:
                GameClientProvider.GameServerChatLeave(playerSession);
                return;

            case NetworkObjectParameters.GameServerChatSendPlayerMessage:
                GameClientProvider.GameServerChatRoomSendMessage(request[1], playerSession);
                return;

            // Avatar Shop
            case NetworkObjectParameters.GameServerAvatarShopBuyAvatarGold:
                answer = GameClientProvider.GameServerAvatarShopBuyAvatar(request[1], playerSession, PaymentMethod.Gold);
                break;

            case NetworkObjectParameters.GameServerAvatarShopBuyAvatarCash:
                answer = GameClientProvider.GameServerAvatarShopBuyAvatar(request[1], playerSession, PaymentMethod.Cash);
                break;

            case NetworkObjectParameters.GameServerAvatarShopUpdatePlayerData:
                GameClientProvider.GameServerAvatarShopUpdatePlayerMetadata(request[1], playerSession);
                return;
            }

            provider.Enqueue(service, answer);
        }