public ConnectionInfoViewModel(ObservablePhotonPeer peer)
{
this.MaxSize = "0B";
this.MaxSent = "0B";
this.MaxReceived = "0B";
this.Peer = new WeakReference(peer);
this.GraphList = new CircularBuffer<UniRx.Tuple<int, int>>(lastWidth);
var interval = TimeSpan.FromMilliseconds(100);
var send = peer.ObserveSendOpCustom().Select(x => GetSize(x)).Buffer(interval, Scheduler.ThreadPool);
var sendReceive = peer.ObserveOperationResponse().Select(x => GetSize(x.OperationResponse.Parameters)).Buffer(interval, Scheduler.ThreadPool);
var receive = peer.ObserveReceiveEventData().Select(x => GetSize(x.Parameters)).Buffer(interval, Scheduler.ThreadPool);
subscription = Observable.Zip(send, sendReceive, receive, (x, y, z) => Tuple.Create(x.Sum(), y.Sum() + z.Sum()))
.Subscribe(x =>
{
lock (GraphListLock)
{
TotalSent += x.Item1;
TotalReceived += x.Item2;
GraphList.Enqueue(x);
}
});
}