internal static unsafe ChaosSchedule FromNative(IntPtr pointer) { var nativeSchedule = *(NativeTypes.FABRIC_CHAOS_SCHEDULE *)pointer; DateTime startDate = NativeTypes.FromNativeFILETIME(nativeSchedule.StartDate); DateTime expiryDate = NativeTypes.FromNativeFILETIME(nativeSchedule.ExpiryDate); Dictionary <string, ChaosParameters> chaosParametersDictionary = new Dictionary <string, ChaosParameters>(); var chaosParametersMap = *(NativeTypes.FABRIC_CHAOS_SCHEDULE_CHAOS_PARAMETERS_MAP *)nativeSchedule.ChaosParametersMap; var nativechaosParametersMapArrayPtr = (NativeTypes.FABRIC_CHAOS_SCHEDULE_CHAOS_PARAMETERS_MAP_ITEM *)chaosParametersMap.Items; for (int i = 0; i < chaosParametersMap.Count; i++) { var nativeItem = *(nativechaosParametersMapArrayPtr + i); var name = NativeTypes.FromNativeString(nativeItem.Name); var parameters = ChaosParameters.CreateFromNative(nativeItem.Parameters); chaosParametersDictionary.Add(name, parameters); } List <ChaosScheduleJob> jobs = new List <ChaosScheduleJob>(); var nativeJobsList = *(NativeTypes.FABRIC_CHAOS_SCHEDULE_JOB_LIST *)nativeSchedule.Jobs; var nativeJobsArrayPtr = (NativeTypes.FABRIC_CHAOS_SCHEDULE_JOB *)nativeJobsList.Items; for (int i = 0; i < nativeJobsList.Count; ++i) { var nativeItem = (nativeJobsArrayPtr + i); ChaosScheduleJob job = ChaosScheduleJob.FromNative(nativeItem); jobs.Add(job); } return(new ChaosSchedule(startDate, expiryDate, chaosParametersDictionary, jobs)); }
/// <summary> /// Reads the state of this object from byte array. /// </summary> /// <param name="br">A BinaryReader object</param> /// <exception cref="EndOfStreamException">The end of the stream is reached. </exception> /// <exception cref="IOException">An I/O error occurs. </exception> public override void Read(BinaryReader br) { decimal objectVersion = br.ReadDecimal(); if (objectVersion >= ChaosConstants.ApiVersion62) { this.StartDate = DateTime.ParseExact( br.ReadString(), ChaosConstants.DateTimeFormat_ISO8601, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); this.ExpiryDate = DateTime.ParseExact( br.ReadString(), ChaosConstants.DateTimeFormat_ISO8601, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); int keyValuePairCount = br.ReadInt32(); for (int i = 0; i < keyValuePairCount; i++) { string tempKey = br.ReadString(); ChaosParameters tempVal = new ChaosParameters(); tempVal.Read(br); this.ChaosParametersDictionary.Add(tempKey, tempVal); } int jobsCount = br.ReadInt32(); for (int i = 0; i < jobsCount; i++) { ChaosScheduleJob job = new ChaosScheduleJob(); job.Read(br); this.Jobs.Add(job); } } else { TestabilityTrace.TraceSource.WriteError(TraceComponent, "Attempting to read a version of object below lowest version. Saw {0}. Expected >=6.2", objectVersion); ReleaseAssert.Fail("Failed to read byte serialization of ChaosSchedule"); } }