rendered paste bodyvar functionReceiveSocketData =
Observable.FromAsyncPattern<byte[], int, int, SocketFlags, int>
(socket.BeginReceive, socket.EndReceive);
Func<byte[], byte[], byte[]> append = (bs1, bs2) =>
{
var rs = new byte[bs1.Length + bs2.Length];
bs1.CopyTo(rs, 0);
bs2.CopyTo(rs, bs1.Length);
return rs;
};
var messages = new Subject<byte[]>();
messages.Subscribe(x => OnMessageReceived(x));
Observable
.Defer(() => /* as above */)
.Repeat()
.Scan(new byte[] { }, (abs, bs) =>
{
var current = append(abs, bs);
if (isCompleteMessage(current))
{
messages.OnNext(current);
current = new byte[] { };
}
return current;
})
.Subscribe();