//request from client
        bool IMakaoGameHostService.DeletePlayerFromRoom(LeaveTheRoomRequest request)
        {
            (bool playerDeleted, bool playerWasHost) = MakaoEngineHostDataPlaceholders.DeletePlayerFromRoom(request);

            if (request.ClosedWindowType == LeavingTheRoomWindowType.MainWindow)
            {
                if (playerDeleted && playerWasHost)
                {
                    InfoSenderClass Sender = new InfoSenderClass();
                    Sender.DeleteTheRoom(ClientInfoType.ClosedByHost);
                }
                else if (playerDeleted)
                {
                    InfoSenderClass Sender = new InfoSenderClass();
                    Sender.StartSendingInfoABoutChangeInCurrentPlayerList();
                }
            }
            else
            {
                InfoSenderClass Sender = new InfoSenderClass();
                Sender.DeleteTheRoom(ClientInfoType.PlayerLeftGame);
            }

            return(playerDeleted);
        }
예제 #2
0
        //deletion from room algorthm
        private void DeleteUserFromRoomAlgorithmMethod(LeavingTheRoomWindowType windowType)
        {
            LeaveTheRoomRequest   request = null;
            IMakaoGameHostService proxy   = null;

            try //try to connect to service host - may be problem when didin't connect before and endpoint is not assigned
            {
                if (makaoGameHostEndpoint == null)
                {
                    AssignHostEndpoint(MakaoGameHostServiceEndpointObtainer.GetHostEndpointWhileBeeingHost());
                }
                ChannelFactory <IMakaoGameHostService> factory = new ChannelFactory <IMakaoGameHostService>(new BasicHttpBinding(),
                                                                                                            new EndpointAddress(MakaoGameHostEndpoint));

                //creating request
                request = new LeaveTheRoomRequest()
                {
                    IsHostPlayer     = IsHostPlayer,
                    PlayerID         = PlayerID,
                    PlayerName       = SavedDataPlaceholder.CurrentPlayerName,
                    PlayerNumber     = PlayerNumber,
                    ClosedWindowType = windowType,
                };
                proxy = factory.CreateChannel();
            }
            catch (Exception ex)
            {
                var logger = NLog.LogManager.GetCurrentClassLogger();
                logger.Error("Error while making attemp to connect to host to delete player " + ex.Message + ex.StackTrace);
            }

            bool response = false;

            try
            {
                response = proxy.DeletePlayerFromRoom(request);
            }
            catch (Exception ex)
            {
                var logger = NLog.LogManager.GetCurrentClassLogger();
                logger.Error("Error while obtaning response from host about deletion of player: " + ex.Message + ex.StackTrace);
            }

            if (response)
            {
                var logger = NLog.LogManager.GetCurrentClassLogger();
                logger.Info("Current player was deleted from room");
            }

            if (IsHostPlayer == true)
            {
                Task.Run(() => StopTheHostServiceWithDelay(3));
            }
        }
        //deleting player from roo if exists in the room
        public static (bool, bool) DeletePlayerFromRoom(LeaveTheRoomRequest request)
        {
            bool deleted       = false;
            bool hostPlayer    = false;
            int  indexToRemove = -5;

            //check if player with such ID and number exists in room
            List <PlayerData> playersList = CurrentPlayersData.FindAll(p => p.PlayerID == request.PlayerID);

            var logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info("Deleting player from room. Amunt of players with matching ID is: " + playersList.Count.ToString());

            //if yes, delete it
            if (playersList.Count == 1)
            {
                if (playersList[0].PlayerID == request.PlayerID && playersList[0].PlayerNumber == request.PlayerNumber)
                {
                    for (int i = 0; i < CurrentPlayersData.Count; i++)
                    {
                        if (CurrentPlayersData[i].PlayerID == request.PlayerID)
                        {
                            var innerLogger = NLog.LogManager.GetCurrentClassLogger();
                            innerLogger.Info("Deleting player from room. Index in the list of matching player: " + i.ToString());

                            //remember index to remove
                            indexToRemove = i;

                            //if player was host, close the room
                            if (CurrentPlayersData[i].IsHostPlayer)
                            {
                                hostPlayer = true;
                            }
                            break;
                        }
                    }

                    //delete the player from list
                    if (indexToRemove >= 0)
                    {
                        CurrentPlayersData.RemoveAt(indexToRemove);
                        deleted = true;

                        var innerLogger = NLog.LogManager.GetCurrentClassLogger();
                        innerLogger.Info("Deleting player from room. Playr deleted");
                    }
                }
            }

            return(deleted, hostPlayer);
        }