private void SaveDelta(Delta delta) { if (MODE == "DATABASE") { NmsContext nmsContext = new NmsContext(); DeltaModel deltaModel = new DeltaModel(); deltaModel.Time = DateTime.Now; deltaModel.Delta = ObjectToByteArray(delta); nmsContext.DeltaModels.Add(deltaModel); nmsContext.SaveChanges(); string message = string.Format("Insert new Delta into database successfully finished. "); CommonTrace.WriteTrace(CommonTrace.TraceInfo, message); Console.WriteLine(message); } else { bool fileExisted = false; if (File.Exists(Config.Instance.ConnectionString)) { fileExisted = true; } FileStream fs = new FileStream(Config.Instance.ConnectionString, FileMode.OpenOrCreate, FileAccess.ReadWrite); fs.Seek(0, SeekOrigin.Begin); BinaryReader br = null; int deltaCount = 0; if (fileExisted) { br = new BinaryReader(fs); deltaCount = br.ReadInt32(); } BinaryWriter bw = new BinaryWriter(fs); fs.Seek(0, SeekOrigin.Begin); delta.Id = ++deltaCount; byte[] deltaSerialized = delta.Serialize(); int deltaLength = deltaSerialized.Length; bw.Write(deltaCount); fs.Seek(0, SeekOrigin.End); bw.Write(deltaLength); bw.Write(deltaSerialized); if (br != null) { br.Close(); br.Dispose(); } bw.Close(); bw.Dispose(); fs.Close(); fs.Dispose(); } }
private List <Delta> ReadAllDeltas() { if (MODE == "DATABASE") { string message = string.Empty; List <Delta> result = new List <Delta>(); List <DeltaModel> resultDelta = new List <DeltaModel>(); NmsContext nmsContext = new NmsContext(); try { resultDelta = nmsContext.DeltaModels.OrderBy(x => x.Time).ToList(); foreach (var item in resultDelta) { byte[] delta_byte = item.Delta as byte[]; result.Add(ByteArrayToObject(delta_byte) as Delta); TraceDelta(ByteArrayToObject(delta_byte) as Delta); } } catch (Exception e) { message = string.Format("Failed to read Delta from database. {0}", e.Message); CommonTrace.WriteTrace(CommonTrace.TraceError, message); Console.WriteLine(message); return(new List <Delta>()); } deltaCount = result.Count; message = string.Format("Successfully read {0} Delta from database.", result.Count.ToString()); CommonTrace.WriteTrace(CommonTrace.TraceInfo, message); Console.WriteLine(message); return(result); } else { List <Delta> result = new List <Delta>(); if (!File.Exists(Config.Instance.ConnectionString)) { return(result); } FileStream fs = new FileStream(Config.Instance.ConnectionString, FileMode.OpenOrCreate, FileAccess.Read); fs.Seek(0, SeekOrigin.Begin); if (fs.Position < fs.Length) // if it is not empty stream { BinaryReader br = new BinaryReader(fs); int deltaCount = br.ReadInt32(); int deltaLength = 0; byte[] deltaSerialized = null; Delta delta = null; for (int i = 0; i < deltaCount; i++) { deltaLength = br.ReadInt32(); deltaSerialized = new byte[deltaLength]; br.Read(deltaSerialized, 0, deltaLength); delta = Delta.Deserialize(deltaSerialized); result.Add(delta); } br.Close(); } fs.Close(); return(result); } return(null); }