Пример #1
0
        public override void DeleteRecordingJob(string JobToken)
        {
            GetRecordingJobsResponseItem job = Search.SearchStorage.Instance.RecordingJobs.Where(j => j.JobToken == JobToken).FirstOrDefault();

            if (job == null)
            {
                ReturnFault(new string[] { "Sender", "InvalidArgVal", "NoRecordingJob" });
            }
            else
            {
                Search.SearchStorage.Instance.RecordingJobs.Remove(job);
            }
        }
Пример #2
0
        public RecordingJobConfiguration GetRecordingJobConfiguration(string token)
        {
            RecordingJobConfiguration config = null;

            GetRecordingJobsResponseItem item = RecordingJobs.Where(j => j.JobToken == token).FirstOrDefault();

            if (item != null)
            {
                config = item.JobConfiguration;
            }

            return(config);
        }
Пример #3
0
        public override string CreateRecordingJob(ref RecordingJobConfiguration JobConfiguration)
        {
            if (Search.SearchStorage.Instance.RecordingJobs.Count > 5)
            {
                ReturnFault(new string[] { "Receiver", "Action", "MaxRecordingJobs" });
            }

            GetRecordingJobsResponseItem job = new GetRecordingJobsResponseItem();

            job.JobToken         = "job" + Guid.NewGuid().ToString().Substring(0, 8);
            job.JobConfiguration = JobConfiguration;

            if (JobConfiguration.Source != null)
            {
                foreach (RecordingJobSource source in JobConfiguration.Source)
                {
                    if (source.AutoCreateReceiverSpecified && source.AutoCreateReceiver)
                    {
                        Receiver.Receiver receiver = new Receiver.Receiver();
                        receiver.Token                                        = Guid.NewGuid().ToString();
                        receiver.Configuration                                = new CameraWebService.Receiver.ReceiverConfiguration();
                        receiver.Configuration.StreamSetup                    = new CameraWebService.Receiver.StreamSetup();
                        receiver.Configuration.MediaUri                       = string.Empty;
                        receiver.Configuration.StreamSetup.Stream             = CameraWebService.Receiver.StreamType.RTPUnicast;
                        receiver.Configuration.StreamSetup.Transport          = new CameraWebService.Receiver.Transport();
                        receiver.Configuration.StreamSetup.Transport.Protocol = CameraWebService.Receiver.TransportProtocol.RTSP;

                        source.SourceToken       = new SourceReference();
                        source.SourceToken.Token = receiver.Token;
                        source.SourceToken.Type  = "http://www.onvif.org/ver10/schema/Receiver";


                        Search.SearchStorage.Instance.Receivers.Add(receiver);
                    }
                }
            }

            Search.SearchStorage.Instance.RecordingJobs.Add(job);
            Search.SearchStorage.Instance.JobStates.Add(job.JobToken, JobConfiguration.Mode);

            return(job.JobToken);
        }
        private void CompareJobStates(GetRecordingJobsResponseItem job,
                                      RecordingJobStateInformation jobState)
        {
            StringBuilder logger = new StringBuilder();
            bool          ok     = true;

            if (job.JobConfiguration.RecordingToken != jobState.RecordingToken)
            {
                ok = false;
                logger.Append(string.Format("   Recording tokens in JobResponse and in JobStateResponse are different{0}",
                                            Environment.NewLine));
            }


            if (job.JobConfiguration.Source != null && jobState.Sources != null)
            {
                var jobStateSourceList = jobState.Sources;
                var jobSourceList      = job.JobConfiguration.Source;
                foreach (var source in jobSourceList)
                {
                    var jobStateSource = jobStateSourceList.FirstOrDefault(
                        s => s.SourceToken.Token == source.SourceToken.Token && s.SourceToken.Type == source.SourceToken.Type);
                    if (jobStateSource == null)
                    {
                        ok = false;
                        logger.Append(string.Format(
                                          "   Source list in GetRecordingJobStateResponse doesn't contain " +
                                          "source with SourceToken='{0}' and Type='{1}'{2}",
                                          source.SourceToken.Token, source.SourceToken.Type,
                                          Environment.NewLine));
                    }
                    else
                    {
                        if (source.Tracks == null &&
                            (jobStateSource.Tracks == null || jobStateSource.Tracks.Track == null))
                        {
                            if (jobStateSource.Tracks == null || jobStateSource.Tracks.Track == null)
                            {
                                ok = false;
                                logger.Append(string.Format(
                                                  "   Recording job source '{0}' in GetRecordingJobStateResponse don't contain track list{1}",
                                                  jobStateSource.SourceToken.Token, Environment.NewLine));
                            }
                            if (source.Tracks == null)
                            {
                                ok = false;
                                logger.Append(string.Format(
                                                  "   Recording job source '{0}' in GetRecordingJobsResponse don't contain track list{1}",
                                                  source.SourceToken.Token, Environment.NewLine));
                            }
                        }
                        else
                        {
                            var jobStateTrackList = jobStateSource.Tracks.Track;
                            var jobTrackList      = source.Tracks;
                            foreach (var track in jobTrackList)
                            {
                                var jobStateTrack = jobStateTrackList.FirstOrDefault(
                                    t => t.SourceTag == track.SourceTag && t.Destination == track.Destination);
                                if (jobStateTrack == null)
                                {
                                    ok = false;
                                    logger.Append(string.Format(
                                                      "   Source {0} in GetRecordingJobStateResponse doesn't " +
                                                      "contain track with Tag='{1}' and Destination='{2}' which is " +
                                                      "contained in GetRecordingJobsResponse{3}",
                                                      source.SourceToken.Token, track.SourceTag,
                                                      track.Destination, Environment.NewLine));
                                }
                            }
                            foreach (var track in jobStateTrackList)
                            {
                                var jobTrack = jobTrackList.FirstOrDefault(
                                    t => t.SourceTag == track.SourceTag && t.Destination == track.Destination);
                                if (jobTrack == null)
                                {
                                    ok = false;
                                    logger.Append(string.Format(
                                                      "   Source {0} in GetRecordingJobsResponse doesn't " +
                                                      "contain track with Tag='{1}' and Destination='{2}' which is " +
                                                      "contained in GetRecordingJobStateResponse{3}",
                                                      source.SourceToken.Token, track.SourceTag,
                                                      track.Destination, Environment.NewLine));
                                }
                            }
                        }
                    }
                }
                foreach (var source in jobStateSourceList)
                {
                    var jobSource = jobSourceList.FirstOrDefault(s =>
                                                                 s.SourceToken.Token == source.SourceToken.Token && s.SourceToken.Type == source.SourceToken.Type);
                    if (jobSource == null)
                    {
                        ok = false;
                        logger.Append(string.Format(
                                          "   Source list in GetRecordingJobsResponse doesn't contain " +
                                          "source with SourceToken='{0}' and Type='{1}'{2}",
                                          source.SourceToken.Token, source.SourceToken.Type,
                                          Environment.NewLine));
                    }
                }
            }
            else
            {
                if (job.JobConfiguration.Source == null && jobState.Sources != null)
                {
                    ok = false;
                    logger.Append(string.Format("   Job with token = '{0}' in GetRecordingJobsResponse" +
                                                " doesn't contain Source list{1}", job.JobToken, Environment.NewLine));
                }
                if (jobState.Sources == null && job.JobConfiguration.Source != null)
                {
                    ok = false;
                    logger.Append(string.Format("   Job with token = '{0}' in GetRecordingJobStateResponse doesn't contain Source list{1}", job.JobToken, Environment.NewLine));
                }
            }
            Assert(ok, logger.ToStringTrimNewLine(), "Validate RecordingJobStateResponse");
        }