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); } }
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()"); }