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(); })); }
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(); })); }