public void subscribe()
        {
            var chatSessionObserver = new ChatSessionsObserver(new ChatRoomManager());

            Observable.FromAsync(server.AcceptWebSocketAsync)
            .Select(ws => new ChatSession(ws)
            {
                In = Observable.FromAsync <dynamic>(ws.ReadDynamicAsync)
                     .DoWhile(() => ws.IsConnected)
                     .Where(msg => msg != null)
                     .Throttle(TimeSpan.FromSeconds(0.5)),

                Out = Observer.Create <dynamic>(ws.WriteDynamic)
            })
            .DoWhile(() => server.IsStarted && !cancellation.IsCancellationRequested)
            .Subscribe(chatSessionObserver);
        }
Ejemplo n.º 2
0
        static void Main(String[] args)
        {
            CancellationTokenSource cancellation = new CancellationTokenSource();

            var endpoint             = new IPEndPoint(IPAddress.Any, 8001);
            WebSocketListener server = new WebSocketListener(endpoint, new WebSocketListenerOptions()
            {
                SubProtocols = new[] { "chat" }
            });
            var rfc6455 = new vtortola.WebSockets.Rfc6455.WebSocketFactoryRfc6455(server);

            rfc6455.MessageExtensions.RegisterExtension(new WebSocketDeflateExtension());
            server.Standards.RegisterStandard(rfc6455);
            server.Start();

            Log("Rx Chat Server started at " + endpoint.ToString());

            var chatSessionObserver = new ChatSessionsObserver(new ChatRoomManager());

            Observable.FromAsync(server.AcceptWebSocketAsync)
            .Select(ws => new ChatSession(ws)
            {
                In = Observable.FromAsync <dynamic>(ws.ReadDynamicAsync)
                     .DoWhile(() => ws.IsConnected)
                     .Where(msg => msg != null),

                Out = Observer.Create <dynamic>(ws.WriteDynamic)
            })
            .DoWhile(() => server.IsStarted && !cancellation.IsCancellationRequested)
            .Subscribe(chatSessionObserver);

            Console.ReadKey(true);
            Log("Server stoping");
            cancellation.Cancel();
            Console.ReadKey(true);
        }