Ejemplo n.º 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();

            services.AddSingleton(provider => new Lazy <ThreadPoolLogger>(() =>
            {
                var threadPoolLogger = new ThreadPoolLogger();
                threadPoolLogger.Start();
                return(threadPoolLogger);
            }));

            var rootUri = Configuration.GetValue <string>("RootUri") ?? throw new ArgumentNullException("RootUri");


            services.AddHttpClient("someapi", client => { client.BaseAddress = new Uri(rootUri); });
        }
Ejemplo n.º 2
0
        //Asynchronous request handler.
        public async Task WebSocketRequestHandler(ThreadPoolLogger threadPoolLogger, WebSocket webSocket)
        {
            JsonSerializer js = new JsonSerializer();


            /*We define a certain constant which will represent
             * size of received data. It is established by us and
             * we can set any value. We know that in this case the size of the sent
             * data is very small.
             */
            const int maxMessageSize = 1024;

            //Buffer for received bits.
            var receivedDataBuffer = new ArraySegment <Byte>(new Byte[maxMessageSize]);

            var cancellationToken = new CancellationToken();

            //Checks WebSocket state.
            while (webSocket.State == WebSocketState.Open)
            {
                using (MemoryStream ms = new MemoryStream())
                    using (StreamWriter sm = new StreamWriter(ms))
                        using (JsonWriter jw = new JsonTextWriter(sm))
                        {
                            var stats = await threadPoolLogger.SourceBlock.ReceiveAsync(cancellationToken);

                            stats.Error = threadPoolLogger.Error;

                            js.Serialize(jw, stats);

                            jw.Flush();

                            //Sends data back.
                            await webSocket.SendAsync(new ArraySegment <byte>(ms.ToArray()),
                                                      WebSocketMessageType.Text, true, cancellationToken).ConfigureAwait(false);

                            await Task.Delay(100).ConfigureAwait(false);
                        }
            }
        }