コード例 #1
0
        //private int SessionIndexPlaying = -1;

        private void StartPlayer(int index)
        {
            //SessionIndexPlaying = index;
            StartIndex   = index;
            CurrentIndex = index;
            CurrentState = EventsState.Playing;

            var lst = SessionElementOrderedList[CurrentIndex];

            Sessions.ForEach(x => x.State = SessionState.WaitingForStartingElement);
            foreach (var sessionElement in lst.Where(x => IsValidStartingEvent(x))) //TODO: Check if sessionElements are able to start
            {
                sessionElement.Session.State = SessionState.Playing;
                sessionElement.State         = SessionElementState.Playing;

                var logElementDTO = OnLoadLogElement?.Invoke(sessionElement);
                if (logElementDTO != null)
                {
                    sessionElement.LogElementInfo.GUID = logElementDTO.GUID;
                    var playElementResponse = OnPlayElement?.Invoke(logElementDTO, ableToWaitForExecution: true);
                    if (playElementResponse == PlayElementResponse.WaitingToBeExecuted)
                    {
                        sessionElement.State = SessionElementState.WaitingToTestIfCalledAutomatically;
                        var t = new Thread(() => WaitForSessionElementToBeCalledAutomatically(logElementDTO));
                        t.IsBackground = true;
                        t.Start();
                    }
                }
            }
        }
コード例 #2
0
        private void WaitForSessionElementToBeCalledAutomatically(LogElementDTO logElementDTO)
        {
            Thread.Sleep(5000);
            var sessionElement = GetPlayingSessionElement(logElementDTO.GUID);

            if (sessionElement != null && sessionElement.State == SessionElementState.WaitingToTestIfCalledAutomatically)
            {
                if (InvokeRequired)
                {
                    Invoke(new MethodInvoker(delegate
                    {
                        OnPlayElement?.Invoke(logElementDTO, ableToWaitForExecution: false);
                    }));
                }
            }
        }
コード例 #3
0
        private NewEvent StartNewEventsIfPossible() //REMEMBER ONLY START CLIENTSIDE EVENTS!!! Serverside-events should have time to be executed before doing anything else... Denne metode sender blot information videre via OnPlayElement-eventet, som sørger for ikke at starte eventet hvis det er serverside
        {
            var lst = SessionElementOrderedList[CurrentIndex];

            if (lst.Any(x => x.State == SessionElementState.Playing))
            {
                return(NewEvent.WaitingForOtherClientEvents); //Still waiting for at least one element to complete
            }
            CurrentIndex++;
            if (SessionElementOrderedList.Count <= CurrentIndex)
            {
                return(NewEvent.None); //Completed everything!
            }
            var newEvent = NewEvent.None;

            lst = SessionElementOrderedList[CurrentIndex];
            foreach (var sessionElement in lst.Where(x => x.Session.State == SessionState.Playing || x.Session.State == SessionState.WaitingForStartingElement && IsValidStartingEvent(x)))
            {
                //if (LogTypeHelper.IsClientsideEvent(sessionElement.LogElementInfo.LogType))
                //{}

                sessionElement.Session.State = SessionState.Playing;
                sessionElement.State         = SessionElementState.Playing;
                var logElementDTO = OnLoadLogElement?.Invoke(sessionElement);
                if (logElementDTO != null)
                {
                    sessionElement.LogElementInfo.GUID = logElementDTO.GUID;
                    var playElementResponse = OnPlayElement?.Invoke(logElementDTO, ableToWaitForExecution: true);

                    if (playElementResponse == PlayElementResponse.WaitingToBeExecuted)
                    {
                        //Hmm, noget er galt her... for den ovenstående foreach udfører alt for mange sessionElements på én gang... noget kalder BrowserJobComplete/done for events der overhovedet ikke er færdige????
                        sessionElement.State = SessionElementState.WaitingToTestIfCalledAutomatically;
                        var t = new Thread(() => WaitForSessionElementToBeCalledAutomatically(logElementDTO));
                        t.IsBackground = true;
                        t.Start();
                        newEvent = NewEvent.WaitingForServerEvents;
                    }
                    else
                    {
                        newEvent = NewEvent.StartedAtLeastOne;
                    }
                }
            }

            return(newEvent);
        }