Esempio n. 1
0
        private static IObservable <Either <Socket, byte[]> > AcceptObservableWithBuffer(this Socket socket, SocketAsyncEventArgs eventArgs)
        {
            Contract.Requires(socket != null);
            Contract.Requires(eventArgs != null);
            Contract.Ensures(Contract.Result <IObservable <Either <Socket, byte[]> > >() != null);

            return(socket
                   .AcceptObservable(eventArgs)
                   .Pair(
                       args => args.AcceptSocket,
                       args =>
            {
                byte[] buffer = args.Buffer;

                if (buffer.Length > args.BytesTransferred)
                {
                    var copy = new byte[args.BytesTransferred];

                    Array.Copy(buffer, copy, args.BytesTransferred);

                    buffer = copy;
                }

                return buffer;
            }));
        }
Esempio n. 2
0
        public static IObservable <Socket> AcceptObservable(this Socket socket)
        {
            Contract.Requires(socket != null);
            Contract.Ensures(Contract.Result <IObservable <Socket> >() != null);

            var args = new SocketAsyncEventArgs();

            return(socket
                   .AcceptObservable(args)
                   .Select(e => e.AcceptSocket)
                   .Finally(args.Dispose));
        }