public virtual IObservable <BleWriteSegment> BlobWrite(Stream stream)
        {
            return(Observable.Create <BleWriteSegment>(async ob =>
            {
                var mtu = this.Service.Device.GetCurrentMtuSize();
                var cts = new CancellationTokenSource();
                var buffer = new byte[mtu];
                var read = stream.Read(buffer, 0, buffer.Length);
                var pos = read;
                var len = Convert.ToInt32(stream.Length);

                while (!cts.IsCancellationRequested && read > 0)
                {
                    await this.Write(buffer).RunAsync(cts.Token);
                    var seg = new BleWriteSegment(buffer, pos, len);
                    read = stream.Read(buffer, 0, buffer.Length);
                    pos += read;
                }
                ob.OnCompleted();

                return () => cts.Cancel();
            }));
        }
Ejemplo n.º 2
0
        public virtual IObservable <BleWriteSegment> BlobWrite(Stream stream)
        {
            return(Observable.Create <BleWriteSegment>(async ob =>
            {
                // TODO: could request MTU increase on droid
                // TODO: should check MTU size for buffer size in any case
                var cts = new CancellationTokenSource();
                var buffer = new byte[20];
                var read = stream.Read(buffer, 0, buffer.Length);
                var pos = read;
                var len = Convert.ToInt32(stream.Length);

                while (!cts.IsCancellationRequested && read > 0)
                {
                    await this.Write(buffer).RunAsync(cts.Token);
                    var seg = new BleWriteSegment(buffer, pos, len);
                    read = stream.Read(buffer, 0, buffer.Length);
                    pos += read;
                }
                ob.OnCompleted();

                return () => cts.Cancel();
            }));
        }