38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.IO;
|
|
using BCG;
|
|
|
|
namespace bts {
|
|
// this saves the updates as a Create on the same file, each update calls -save, which
|
|
// reqrites the whole data to the packet. The other side of this stream is the Loader
|
|
[DataStreamUserRespresentation("saver")]
|
|
public class SaverStream : ViewStream {
|
|
private ViewStream _stream;
|
|
private string _filename;
|
|
private IStreamIOMsgSerializer _serializer = new StreamIOSerializationController();
|
|
|
|
public SaverStream(ViewStream vs, string filename) {
|
|
_stream = vs;
|
|
_filename = filename;
|
|
}
|
|
|
|
protected override void myOnFirstSubscriber() { _stream.onChange += new ChangeDelegate(_handle_changes); }
|
|
|
|
void _handle_changes(object dp_obj) {
|
|
DataPacket dp = dp_obj as DataPacket;
|
|
_save(dp);
|
|
myFireEvent(dp_obj);
|
|
}
|
|
|
|
protected override void myOnLastSubscriber() { _stream.onChange -= new ChangeDelegate(_handle_changes); }
|
|
|
|
protected void _save(DataPacket dp) {
|
|
StreamIOMessage.CreateMessage cr_msg = new StreamIOMessage.CreateMessage(dp.newRows);
|
|
byte[] str_bytes = _serializer.serialize(new StreamIOMessage(cr_msg));
|
|
StreamSerializationUtils.write_to_file(str_bytes, _filename);
|
|
}
|
|
}
|
|
}
|