public void  MeteringReportProactively()
        {
            TestLogger.LogMessage("Enter Metering.MeteringReportProactively()");
            try
            {
                TestLogger.LogMessage("Creating metering report service request...");
                PlayReadyMeteringReportServiceRequest meteringRequest = new PlayReadyMeteringReportServiceRequest();
                MeteringReportReactively(meteringRequest);
            }
            catch (Exception ex)
            {
                if (ex.HResult == ServiceRequest.MSPR_E_NEEDS_INDIVIDUALIZATION)
                {
                    PlayReadyIndividualizationServiceRequest indivServiceRequest = new PlayReadyIndividualizationServiceRequest();

                    RequestChain requestChain = new RequestChain(indivServiceRequest);
                    requestChain.FinishAndReportResult(new ReportResultDelegate(HandleIndivServiceRequest_Finished));
                }
                else
                {
                    TestLogger.LogImportantMessage("MeteringReportProactively failed:" + ex.HResult);
                }
            }

            TestLogger.LogMessage("Leave Metering.MeteringReportProactively()");
        }
        protected virtual void MeteringServiceRequestCompleted(PlayReadyMeteringReportServiceRequest sender, Exception hrCompletionStatus)
        {
            TestLogger.LogImportantMessage("MeteringServiceRequestCompleted");

            if (hrCompletionStatus != null)
            {
                TestLogger.LogError("MeteringServiceRequestCompleted failed with " + hrCompletionStatus.HResult);
            }
        }
示例#3
0
        protected virtual void MeteringServiceRequestCompleted(PlayReadyMeteringReportServiceRequest sender, Exception hrCompletionStatus)
        {
            Debug.WriteLine("MeteringServiceRequestCompleted");

            if (hrCompletionStatus != null)
            {
                Debug.WriteLine("MeteringServiceRequestCompleted failed with " + hrCompletionStatus.HResult);
            }
        }
        async public void  MeteringReportReactively(PlayReadyMeteringReportServiceRequest meteringRequest)
        {
            TestLogger.LogMessage("Enter Metering.MeteringReportReactively()");
            Exception exception = null;

            try
            {
                _serviceRequest = meteringRequest;
                ConfigureServiceRequest();

                TestLogger.LogMessage("ChallengeCustomData = " + meteringRequest.ChallengeCustomData);
                if (RequestConfigData.ManualEnabling)
                {
                    TestLogger.LogMessage("Manually posting the request...");

                    HttpHelper httpHelper = new HttpHelper(meteringRequest);
                    await httpHelper.GenerateChallengeAndProcessResponse();
                }
                else
                {
                    TestLogger.LogMessage("Begin metering service request...");
                    await meteringRequest.BeginServiceRequest();
                }
            }
            catch (Exception ex)
            {
                TestLogger.LogMessage("Saving exception..");
                exception = ex;
            }
            finally
            {
                TestLogger.LogMessage("Post-Metering Values:");
                if (exception == null)
                {
                    TestLogger.LogMessage("ResponseCustomData = " + meteringRequest.ResponseCustomData);
                    TestLogger.LogMessage("ProtectionSystem   = " + meteringRequest.ProtectionSystem.ToString());
                    TestLogger.LogMessage("Type = " + meteringRequest.Type.ToString());
                }

                MeteringServiceRequestCompleted(meteringRequest, exception);
            }

            TestLogger.LogMessage("Leave Metering.MeteringReportReactively()");
        }
        void ConfigureServiceRequest()
        {
            PlayReadyMeteringReportServiceRequest meteringRequest = _serviceRequest as PlayReadyMeteringReportServiceRequest;

            TestLogger.LogMessage(" ");
            TestLogger.LogMessage("Configure metering request to these values:");
            if (RequestConfigData.Uri != null)
            {
                TestLogger.LogMessage("URL       :" + RequestConfigData.Uri.ToString());
                meteringRequest.Uri = RequestConfigData.Uri;
            }

            if (RequestConfigData.ChallengeCustomData != null && RequestConfigData.ChallengeCustomData != String.Empty)
            {
                TestLogger.LogMessage("ChallengeCustomData:" + RequestConfigData.ChallengeCustomData);
                meteringRequest.ChallengeCustomData = RequestConfigData.ChallengeCustomData;
            }

            meteringRequest.MeteringCertificate = GetMeteringCertificate();

            TestLogger.LogMessage(" ");
        }
        protected override void MeteringServiceRequestCompleted(PlayReadyMeteringReportServiceRequest meteringRequest, Exception hrCompletionStatus)
        {
            TestLogger.LogMessage("Enter MeteringAndReportResult.MeteringServiceRequestCompleted()");

            if (hrCompletionStatus == null)
            {
                string strMeteringReportXml = XmlConvert.DecodeName(meteringRequest.ResponseCustomData);
                TestLogger.LogMessage("Metering report Xml = " + strMeteringReportXml);

                uint actualPlayCount = 0;
                bool bFound          = false;

                if (strMeteringReportXml.Contains("meteringRecord"))
                {
                    //ResponseCustomData format on server http://playready.directtaps.net
                    string [] dataList = strMeteringReportXml.Split(' ');
                    foreach (var data in dataList)
                    {
                        if (data.Contains("Play:"))
                        {
                            bFound = true;
                            string strplayCount = data.Trim().Substring(5);
                            actualPlayCount = Convert.ToUInt32(Regex.Match(strplayCount, @"\d+").Value);
                        }
                    }
                }
                else
                {
                    //otherwise, ResponseCustomData format on server http://capprsvr05/I90playreadymain/rightsmanager.asmx
                    XElement xElement = XElement.Parse(strMeteringReportXml);
                    actualPlayCount = (from item in xElement.Descendants("Action")
                                       where (string)item.Attribute("Name") == "Play"
                                       select(uint) item.Attribute("Value")
                                       ).First();
                    bFound = true;
                }

                if (!bFound)
                {
                    throw new Exception("unrecoganized meteringRequest.ResponseCustomData");
                }

                PlayCount = actualPlayCount;

                if (actualPlayCount == _expectedPlayCount)
                {
                    TestLogger.LogMessage("Actual PlayCount = " + actualPlayCount + " from  metering processed report.");
                    TestLogger.LogMessage("************************************    MeteringReport succeeded       ****************************************");
                    _reportResult(true, null);
                }
                else
                {
                    TestLogger.LogMessage("!!!!!!Actual PlayCount = " + actualPlayCount + "but expected = " + _expectedPlayCount);
                    _reportResult(false, null);
                }
            }
            else
            {
                if (PerformEnablingActionIfRequested(hrCompletionStatus) || HandleExpectedError(hrCompletionStatus))
                {
                    TestLogger.LogMessage("Exception handled.");
                }
                else
                {
                    TestLogger.LogError("MeteringServiceRequestCompleted ERROR: " + hrCompletionStatus.ToString());
                    _reportResult(false, null);
                }
            }

            TestLogger.LogMessage("Leave MeteringAndReportResult.MeteringServiceRequestCompleted()");
        }