static void Main(string[] args) { var endpoint = ProgramArgs.Parse(args, new[] { "127.0.0.1:9211" }).EndPoint; var cts = new CancellationTokenSource(); var bufferManager = BufferManager.CreateBufferManager(2 << 16, 2 << 8); var selector = new Selector(); Task.Factory.StartNew(() => selector.Dispatch(60000000, cts.Token), cts.Token); endpoint.ToConnectObservable(selector, cts.Token) .Subscribe(socket => { var frameClientSubject = socket.ToFrameClientSubject(SocketFlags.None, bufferManager, selector, cts.Token); var observerDisposable = frameClientSubject .ObserveOn(TaskPoolScheduler.Default) .Subscribe( disposableBuffer => { Console.WriteLine("Read: " + Encoding.UTF8.GetString(disposableBuffer.Bytes, 0, disposableBuffer.Length)); disposableBuffer.Dispose(); }, error => Console.WriteLine("Error: " + error.Message), () => Console.WriteLine("OnCompleted: FrameReceiver")); Console.In.ToLineObservable() .Subscribe( line => { var writeBuffer = Encoding.UTF8.GetBytes(line); frameClientSubject.OnNext(new DisposableByteBuffer(writeBuffer, writeBuffer.Length, Disposable.Empty)); }, error => Console.WriteLine("Error: " + error.Message), () => Console.WriteLine("OnCompleted: LineReader")); observerDisposable.Dispose(); cts.Cancel(); }); cts.Token.WaitHandle.WaitOne(); }
static void Main(string[] args) { var endpoint = ProgramArgs.Parse(args, new[] { "127.0.0.1:9211" }).EndPoint; var cts = new CancellationTokenSource(); var selector = new Selector(); endpoint.ToListenerObservable(10, selector) .ObserveOn(TaskPoolScheduler.Default) .Subscribe( client => client.ToClientObservable(1024, SocketFlags.None, selector) .Subscribe(client.ToClientObserver(SocketFlags.None, selector, cts.Token), cts.Token), error => Console.WriteLine("Error: " + error.Message), () => Console.WriteLine("OnCompleted"), cts.Token); Task.Factory.StartNew(() => selector.Dispatch(60000000, cts.Token), cts.Token); Console.WriteLine("Press <ENTER> to quit"); Console.ReadLine(); cts.Cancel(); }