51 lines
1.5 KiB
C#
51 lines
1.5 KiB
C#
using System;
|
|
|
|
namespace bts.BlueOrb {
|
|
using BCG;
|
|
[DataStreamUserRespresentation("CountStream")]
|
|
public class CountStream : ViewStream {
|
|
private DataPacket myLastFiredDataPacket;
|
|
private IBlueTableSchema mySchema = new BlueTableSchema("count",
|
|
new ColumnInfo("id", 0, typeof(int)),
|
|
new ColumnInfo("count", 1, typeof(int)));
|
|
private int myId = 0;
|
|
private ViewStream myVS;
|
|
|
|
public CountStream(ViewStream vs) {
|
|
myVS = vs;
|
|
}
|
|
|
|
public CountStream(string tableName)
|
|
: this(new TableStream(tableName)) { }
|
|
|
|
protected override void myOnFirstSubscriber() {
|
|
myVS.onChange += new ChangeDelegate(myHandleChanges);
|
|
}
|
|
protected override void myOnLastSubscriber() {
|
|
myVS.onChange -= new ChangeDelegate(myHandleChanges);
|
|
}
|
|
|
|
|
|
private void myHandleChanges(object newValue) {
|
|
myFireEvent(
|
|
myLastFiredDataPacket =
|
|
myLastFiredDataPacket == null ?
|
|
new DataPacket(myGetRows(newValue, ++myId), myGetRows(newValue, myId),
|
|
new BlueTable(mySchema))
|
|
:
|
|
new DataPacket(myGetRows(newValue, ++myId), myGetRows(newValue, myId),
|
|
myLastFiredDataPacket.newRows)
|
|
);
|
|
}
|
|
|
|
private IBlueRowCollection myGetRows(object dp, int id) {
|
|
BlueTable retVal = new BlueTable(mySchema);
|
|
retVal.addRow
|
|
(new BlueRow(mySchema, id, (dp as DataPacket).newRows.Count));
|
|
return retVal;
|
|
}
|
|
|
|
|
|
}
|
|
}
|