/// <summary> /// End extend (async). /// </summary> /// <param name="asyncResult">async result</param> /// <returns>extended calendar hash chain</returns> public CalendarHashChain EndExtend(IAsyncResult asyncResult) { if (_extendingServiceProtocol == null) { throw new KsiServiceException("Extending service protocol is missing from service."); } KsiServiceAsyncResult serviceAsyncResult = GetKsiServiceAsyncResult(asyncResult); if (!serviceAsyncResult.IsCompleted) { serviceAsyncResult.AsyncWaitHandle.WaitOne(); } byte[] data = _extendingServiceProtocol.EndExtend(serviceAsyncResult); PduPayload payload = ExtendRequestResponseParser.Parse(data, serviceAsyncResult.RequestId); if (IsLegacyPduVersion) { LegacyExtendResponsePayload legacyResponsePayload = payload as LegacyExtendResponsePayload; if (legacyResponsePayload == null) { Logger.Warn("Extend request failed. Invalid response payload.{0}Payload:{0}{1}", Environment.NewLine, payload); throw new KsiServiceException("Invalid extend response payload. Type: " + payload.Type); } return(legacyResponsePayload.CalendarHashChain); } else { ExtendResponsePayload responsePayload = payload as ExtendResponsePayload; if (responsePayload == null) { Logger.Warn("Extend request failed. Invalid response payload.{0}Payload:{0}{1}", Environment.NewLine, payload); throw new KsiServiceException("Invalid extend response payload. Type: " + payload.Type); } Logger.Debug("End extend successful (request id: {0}){1}{2}", serviceAsyncResult.RequestId, Environment.NewLine, responsePayload.CalendarHashChain); return(responsePayload.CalendarHashChain); } }
/// <summary> /// Parse child tag /// </summary> protected override ITlvTag ParseChild(ITlvTag childTag) { switch (childTag.Type) { case Constants.ExtendResponsePayload.TagType: ExtendResponsePayload extendResponsePayload = childTag as ExtendResponsePayload ?? new ExtendResponsePayload(childTag); Payloads.Add(extendResponsePayload); return(extendResponsePayload); case Constants.ErrorPayload.TagType: return(ErrorPayload = childTag as ExtendErrorPayload ?? new ExtendErrorPayload(childTag)); case Constants.ExtenderConfigResponsePayload.TagType: ExtenderConfigResponsePayload configResponsePayload = childTag as ExtenderConfigResponsePayload ?? new ExtenderConfigResponsePayload(childTag); Payloads.Add(configResponsePayload); return(configResponsePayload); default: return(base.ParseChild(childTag)); } }