Exemplo n.º 1
0
        public SseClientTest(ITestOutputHelper output)
        {
            var converter = new Converter(output);

            Console.SetOut(converter);

            Configuration.Define();
            _context = new MockRequestResponseContext(new MockResponseSenderChannel());
            _client  = new SseClient(_context);
        }
Exemplo n.º 2
0
    public SseFeedTest(ITestOutputHelper output)
    {
        var converter = new Converter(output);

        Console.SetOut(converter);

        _world = World.StartWithDefaults("test-feed");
        Configuration.Define();
        _context = new MockRequestResponseContext(new MockResponseSenderChannel());
        _client  = new SseClient(_context);
    }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());

            XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
            var log           = log4net.LogManager.GetLogger(typeof(Program));
            var settings      = GetSettings();
            var mongoDbClient = new MongoDbClient(settings.MongoConnectionString, TimeSpan.FromSeconds(2));

            ThreadPool.SetMaxThreads(32767, 32767);
            ThreadPool.SetMinThreads(2048, 2048);

            var(authorizer, sourceStorage) = new StateRestorer(mongoDbClient).Restore().GetAwaiter().GetResult();

            var addUserInfoHandler = new AddSourceInfoHandler(mongoDbClient, authorizer, sourceStorage, log);
            var sseClient          = new SseClient();
            var subscriber         = new Subscriber(authorizer, sourceStorage, sseClient);
            var messagSender       = new MessageSender();
            var sendMessageHandler = new SendMessageHandler(messagSender, mongoDbClient, sourceStorage, authorizer, settings.dataTtl);
            var handlerMapper      = new HandlerMapper();

            var expDaemon = new ExpirationDaemon(sourceStorage, settings.dataTtl);

            handlerMapper.Add("/addUserInfo", HttpMethod.Post, addUserInfoHandler);
            handlerMapper.Add("/subscribe", HttpMethod.Get, new SubscribeOnSourceHandler(subscriber));
            handlerMapper.Add("/sendMessage", HttpMethod.Post, sendMessageHandler);


            var routingHandler = new RoutingHandler(handlerMapper, log);

            var host = WebHost.CreateDefaultBuilder(args)
                       .ConfigureServices(s =>
            {
                s.AddSingleton(routingHandler);
                s.AddHttpContextAccessor();
            })
                       .UseContentRoot(Directory.GetCurrentDirectory())
                       .UseKestrel()
                       .UseStartup <Startup>()
                       .ConfigureKestrel((context, options) =>
            {
                //options.Listen(new IPAddress(new byte[] { 10, 33, 54, 120 }), 5000);
                options.Listen(new IPAddress(new byte[] { 0, 0, 0, 0 }), 5000);
            })
                       .Build();

            host.Run();
        }
        public async Task SubscribeClient(int eventUserID)
        {
            // int eventUserID = Request.GetUserID();
            // int eventUserID = 1;

            _httpContextAccessor.HttpContext.Response.ContentType = "text/event-stream";
            _httpContextAccessor.HttpContext.Response.Body.Flush();

            SseClient client   = new SseClient(_httpContextAccessor.HttpContext.Response, eventUserID);
            Guid      clientId = _sseService.AddClient(client);

            _httpContextAccessor.HttpContext.RequestAborted.WaitHandle.WaitOne();

            _sseService.RemoveClient(clientId);


            await Task.FromResult(true);
        }
Exemplo n.º 5
0
        // SSE User Broadcast
        public Task SendEventsAsync(string notification, bool alert, int userId)
        {
            List <Task> clientsTasks = new List <Task>();

            var clients = _clients.Where(client => client.Value.isUser(userId));

            if (!clients.Any())
            {
                return(Task.CompletedTask);
            }

            foreach (var clientPair in clients)
            {
                SseClient client = clientPair.Value;
                clientsTasks.Add(client.SendSseEventAsync(notification, alert));
            }

            return(Task.WhenAll(clientsTasks));
        }
Exemplo n.º 6
0
        // Test subscribe
        public Task Invoke(HttpContext context)
        {
            if (context.Request.Headers["Accept"] == "text/event-stream")
            {
                context.Response.ContentType = "text/event-stream";
                context.Response.Body.Flush();

                SseClient client   = new SseClient(context.Response, 1);
                Guid      clientId = _sseService.AddClient(client);

                context.RequestAborted.WaitHandle.WaitOne();

                _sseService.RemoveClient(clientId);

                return(Task.FromResult(true));
            }
            else
            {
                return(_next(context));
            }
        }
Exemplo n.º 7
0
        public async Task InvokeAsync(HttpContext context)
        {
            if (context.Request.Headers["Accept"] == "text/event-stream")
            {
                context.Response.ContentType = "text/event-stream";

                var client = new SseClient(Guid.NewGuid(), context.Response);
                serverSentEventsServie.AddClient(client);

                await serverSentEventsServie.SendToAll("Client Connected");

                context.RequestAborted.WaitHandle.WaitOne();

                serverSentEventsServie.RemoveClient(client);

                await serverSentEventsServie.SendToAll("Client Disconnected");
            }
            else
            {
                await next(context);
            }
        }
Exemplo n.º 8
0
 public MessageSender()
 {
     sseClient = new SseClient();
 }
Exemplo n.º 9
0
 public SseSubscriberTest()
 {
     Configuration.Define();
     _context = new MockRequestResponseContext(new MockResponseSenderChannel());
     _client  = new SseClient(_context);
 }
Exemplo n.º 10
0
 public SseSubscriber(string streamName, SseClient client)
     : this(streamName, client, string.Empty, string.Empty)
 {
 }