Esempio n. 1
0
        public static void RegisterCallbacks()
        {
            VerifyFilterRegistration();
            SharpStepCallback callback =
                (ObjectId, StepNumber, Type, Text) =>
            {
                VideoContainer2 v             = null;
                IVideoFormEvent EventConsumer = null;
                lock (AllContainers)
                {
                    v = AllContainers[ObjectId];
                }
                if (v != null)
                {
                    EventConsumer = v.EventConsumer;
                }
                try
                {
                    switch (Type)
                    {
                    case 0:
                        if (EventConsumer != null)
                        {
                            EventConsumer.FireBeginStep(Text);
                        }
                        ;
                        Console.WriteLine("\nFilter = {0}, step{1}: Begin {2}", ObjectId, StepNumber, Text);
                        break;

                    case 1:
                        if (EventConsumer != null)
                        {
                            EventConsumer.FireStepRequest(Text);
                        }
                        ;
                        Console.WriteLine("\nFilter = {0}, step{1}: Send [{2}]", ObjectId, StepNumber, Text);
                        break;

                    case 2:
                        if (EventConsumer != null)
                        {
                            EventConsumer.FireStepResponse(Text);
                        }
                        ;
                        Console.WriteLine("\nFilter = {0}, step{1}: Recv [{2}]", ObjectId, StepNumber, Text);
                        break;

                    case 3:
                        if (EventConsumer != null)
                        {
                            EventConsumer.FireLogStepEvent(Text);
                        }
                        ;
                        Console.WriteLine("\nFilter = {0}, step{1}: Log  [{2}]", ObjectId, StepNumber, Text);
                        break;

                    case 4:
                        if (EventConsumer != null)
                        {
                            EventConsumer.FireStepPassed();
                        }
                        ;
                        Console.WriteLine("\nFilter = {0}, step{1}: Success {2}", ObjectId, StepNumber, Text);
                        break;

                    case 5:
                        v.Failed     = true;
                        v.FailedText = Text;
                        //if (EventConsumer != null) { EventConsumer.FireStepFailed(Text); };
                        Console.WriteLine("\nFilter = {0}, step{1}: Failure {2}", ObjectId, StepNumber, Text);
                        break;

                    default:
                        Console.WriteLine("\nFilter = {0}, step{1}: Undefined type {3}, Text=[{2}]", ObjectId, StepNumber, Text, Type);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    v.Failed     = true;
                    v.FailedText = ex.Message;
                }
            };

            SetGlobalStepCallback(callback);
        }
Esempio n. 2
0
        public static void ShowMultiple(
            IVideoFormEvent eventConsumer,
            WaitHandle stopEvent,
            string username,
            string password,
            int timeout,
            GetStreamSetup getStreamSetup,
            int NICIndex,
            List <Profile> profiles,
            Func <StreamSetup, string, MediaUri> getStreamUri,
            Action <Action, string, bool> runStep,
            Action <Exception> stepFailed)
        {
            List <VideoStreamForm> streams         = new List <VideoStreamForm>();
            List <WaitHandle>      eventsWorkEnded = new List <WaitHandle>();

            timeout = Math.Max(timeout, 2000 * profiles.Count());

            WaitHandle signalCloseWindow = new AutoResetEvent(false);

            foreach (Profile profile in profiles)
            {
                Profile     currentProfile = profile;
                StreamSetup streamSetup    = getStreamSetup(ref currentProfile);
                if (currentProfile == null)
                {
                    continue;
                }

                VideoStreamForm vsf = new VideoStreamForm();
                vsf.streamSetup       = streamSetup;
                vsf.profile           = currentProfile;
                vsf.getStreamUri      = getStreamUri;
                vsf.messageTimeout    = timeout;
                vsf.username          = username;
                vsf.password          = password;
                vsf.signalCloseWindow = signalCloseWindow;
                vsf.eventConsumer     = eventConsumer;
                vsf.NICIndex          = NICIndex;
                streams.Add(vsf);
                eventsWorkEnded.Add(vsf.eventWorkEnded);
            }

            if (0 == streams.Count)
            {
                return;
            }

            bool timeoutException = false;

            try
            {
                VideoStreamForm vsfFailed = null;
                foreach (VideoStreamForm vsf in streams)
                {
                    ((ManualResetEvent)vsf.eventWorkEnded).Reset();
                    vsf.thread.Start(vsf);
                    if (0 == WaitHandle.WaitAny(new WaitHandle[] { stopEvent, vsf.eventOpened, vsf.eventWorkEnded }))
                    {
                        throw new StopEventException();
                    }
                    if (vsf.exception != null)
                    {
                        stepFailed(vsf.exception);
                        vsfFailed = vsf;
                        break;
                    }
                }

                foreach (VideoStreamForm vsf in streams)
                {
                    if (vsf.thread.ThreadState != ThreadState.Unstarted && vsf != vsfFailed)
                    {
                        vsf.skipLog = true;
                    }
                }

                ((AutoResetEvent)signalCloseWindow).Set();

                runStep(() =>
                {
                    if (!WaitHandle.WaitAll(eventsWorkEnded.ToArray(), timeout))
                    {
                        ((AutoResetEvent)signalCloseWindow).Reset();
                        timeoutException = true;
                        throw new VideoException("Waiting timeout exceeded");
                    }
                }, "Closing streams", false);

                if (timeoutException)
                {
                    throw new VideoException("Waiting timeout exceeded");
                }
            }
            // handle halt
            catch (Exception ex)
            {
                runStep(() =>
                {
                    foreach (VideoStreamForm vsf in streams)
                    {
                        if (vsf.thread.ThreadState != ThreadState.Unstarted)
                        {
                            vsf.thread.Abort();
                            vsf.thread.Join();
                        }
                    }
                }, "Cleanup", true);
                if (!timeoutException)
                {
                    throw ex;
                }
            }
            runStep(() =>
            {
                // check for exceptions
                if (timeoutException)
                {
                    throw new VideoException("Closing streams failed!");
                }
                foreach (VideoStreamForm vsf in streams)
                {
                    vsf.thread.Join();
                    if (vsf.exception != null)
                    {
                        throw new VideoException("Profile " + vsf.profile.Name + " failed!");
                    }
                }
            }, "Check for test results", true);
        }