130 lines
6.3 KiB
C#
130 lines
6.3 KiB
C#
// using System;
|
|
// using System.Collections.Generic;
|
|
// using System.Linq;
|
|
// using System.Text;
|
|
// using System.IO;
|
|
// using System.Runtime.Serialization.Formatters.Binary;
|
|
// using BCG.Utilities.General;
|
|
// using bts.collections;
|
|
// using System.Reflection.Metadata;
|
|
|
|
|
|
namespace BCG {
|
|
public class SnapshotStream : ViewStream {
|
|
public enum SpecificSnapshot {
|
|
FirstOfDay,
|
|
LastOfDay
|
|
};
|
|
// private BlueTable _current_table;
|
|
// private IClientDeserializer _deserilializer = new ClientUniversalDeserializer();
|
|
// public DateTime _snapshot_time;
|
|
// public string _snapshot_file;
|
|
// public IEnumerable<PlaybackPacket> _packets;
|
|
// public SnapshotStream(string snapshot_date, string specific_snapshot, string directory_name, string token) {
|
|
// DateTime dt;
|
|
// var parsed = DateTime.TryParse(snapshot_date, out dt);
|
|
// dt = dt.Date;
|
|
// bts.Log.assert(parsed);
|
|
// SpecificSnapshot specific_snapshot_enum;
|
|
// parsed = Enum.TryParse<SpecificSnapshot>(specific_snapshot, out specific_snapshot_enum);
|
|
// bts.Log.assert(parsed);
|
|
// string snapshot_dt = StreamPersistorUtils.find_snapshot_file($"{directory_name}\\{token}", dt, specific_snapshot_enum);
|
|
// ViewStream rs = new SnapshotStream(snapshot_dt, directory_name, token);
|
|
// mySetRealSource(rs);
|
|
// }
|
|
|
|
// public SnapshotStream(string snapshot_dt, string directory_name, string token) {
|
|
// _snapshot_time = PersistorStream.parse_datetime(snapshot_dt);
|
|
// string token_directory_name = $"{directory_name}\\{token}";
|
|
// _snapshot_file = StreamPersistorUtils.find_snapshot_file(token_directory_name, _snapshot_time);
|
|
// }
|
|
|
|
// protected override void myOnFirstSubscriber() {
|
|
// FileStream fs = new FileStream(_snapshot_file, FileMode.Open, FileAccess.Read);
|
|
// _packets = StreamPersistorUtils.load_packets_from_file(fs);
|
|
// PlaybackPacket snapshot_packet = StreamPersistorUtils.find_packet_at_time(_packets, _snapshot_time);
|
|
// if (snapshot_packet != null) {
|
|
// foreach (PlaybackPacket p in _packets) {
|
|
// byte[] ops;
|
|
// Array row_array;
|
|
// _deserilializer.deserialize(new Stream[] { new MemoryStream(p.data) }, out ops, out row_array);
|
|
// for (int i = 0; i < ops.Length; i++) {
|
|
// IBlueRowCollection[] rows_args = row_array.GetValue(i) as IBlueRowCollection[];
|
|
// byte op = ops[i];
|
|
// if (op == StreamOpCode.create) {
|
|
// IBlueRowCollection full_table = rows_args[0];
|
|
// _current_table = new BlueTable(full_table);
|
|
// } else if (op == StreamOpCode.multipleRemoveAdd) {
|
|
// //IBlueRowCollection[] del_added = rows_args.GetValue(0) as IBlueRowCollection[];
|
|
// IBlueRowCollection dels = rows_args.GetValue(0) as IBlueRowCollection;
|
|
// IBlueRowCollection adds = rows_args.GetValue(1) as IBlueRowCollection;
|
|
// BlueDataUtility.absorbChanges(_current_table, dels, adds);
|
|
// } else {
|
|
// bts.Log.assert(false, $"Oprator: {op} is not expected");
|
|
// }
|
|
// if (p.idx == snapshot_packet.idx) {
|
|
// myFireEvent(new DataPacket(_current_table, _current_table, new BlueTable(_current_table.schema)));
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// private void _absorb_packet(byte[] ops, Array row_array) {
|
|
// for (int i = 0; i < ops.Length; i++) {
|
|
// IBlueRowCollection[] rows_args = row_array.GetValue(i) as IBlueRowCollection[];
|
|
// byte op = ops[i];
|
|
// if (op == StreamOpCode.create) {
|
|
// IBlueRowCollection full_table = rows_args[0];
|
|
// _current_table = new BlueTable(full_table);
|
|
// } else if (op == StreamOpCode.multipleRemoveAdd) {
|
|
// //IBlueRowCollection[] del_added = rows_args.GetValue(0) as IBlueRowCollection[];
|
|
// IBlueRowCollection dels = rows_args.GetValue(0) as IBlueRowCollection;
|
|
// IBlueRowCollection adds = rows_args.GetValue(1) as IBlueRowCollection;
|
|
// BlueDataUtility.absorbChanges(_current_table, dels, adds);
|
|
// } else {
|
|
// bts.Log.assert(false, $"Operator: {op} is not expected");
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// protected override void myOnLastSubscriber() {
|
|
// }
|
|
|
|
// // public event SnapshotStream.Progress onProgress;
|
|
// // public event Action onFileExhausted;
|
|
// private PlaybackPacket _locate_packet_to_replay() {
|
|
// foreach (var p in _packets) {
|
|
// // returns the first non replayed packet
|
|
// if (!p.replayed)
|
|
// return p;
|
|
// }
|
|
// return null;
|
|
// }
|
|
|
|
// private void _fire_packet(byte[] ops, Array row_array) {
|
|
// for (int i = 0; i < ops.Length; i++) {
|
|
// IBlueRowCollection[] rows_args = row_array.GetValue(i) as IBlueRowCollection[];
|
|
// byte op = ops[i];
|
|
// if (op == StreamOpCode.create) {
|
|
// IBlueRowCollection full_table = rows_args[0];
|
|
// _current_table = new BlueTable(full_table);
|
|
// //_current_table.addRows(full_table);
|
|
// myFireEvent(new DataPacket(full_table, full_table, myLastValue == null ? new BlueTable(full_table.schema) :
|
|
// (myLastValue as DataPacket).newRows));
|
|
// } else if (op == StreamOpCode.multipleRemoveAdd) {
|
|
// //IBlueRowCollection[] del_added = rows_args.GetValue(0) as IBlueRowCollection[];
|
|
// IBlueRowCollection dels = rows_args.GetValue(0) as IBlueRowCollection;
|
|
// IBlueRowCollection adds = rows_args.GetValue(1) as IBlueRowCollection;
|
|
// BlueDataUtility.absorbChanges(_current_table, dels, adds);
|
|
// myFireEvent(new DataPacket(_current_table, adds, dels));
|
|
// } else {
|
|
// bts.Log.assert(false, $"Oprator: {op} is not expected");
|
|
// }
|
|
|
|
// }
|
|
// }
|
|
}
|
|
}
|