Пример #1
0
 void TcpReader()
 {
     try
     {
         using (StreamReader reader = new StreamReader(_client.GetStream(), Encoding.UTF8))
         {
             string line;
             while ((line = reader.ReadLine()) != null)
             {
                 try
                 {
                     Event response = JsonConvert.DeserializeObject <Event>(line);
                     _responseAnalyzer.Analyze(response);
                 }
                 catch (Exception)
                 {
                     Debug.Log("Non-JSON Message: " + line);
                 }
             }
         }
     }
     catch (SocketException socketException)
     {
         Debug.Log("Socket exception: " + socketException);
     }
 }
Пример #2
0
        public async Task <RawReadStreamResult> ReadAsync(ReadStreamQuery query, string apiKey, TimeSpan timeout, CancellationToken cancellationToken = default)
        {
            try
            {
                var url = new RequestUrlBuilder("stream/read")
                {
                    { Constants.QueryParameters.Stream, query.Name },
                    { Constants.QueryParameters.Limit, query.Limit },
                    { Constants.QueryParameters.ClientShard, query.ClientShard },
                    { Constants.QueryParameters.ClientShardCount, query.ClientShardCount }
                }
                .Build();

                var body = CreateRequestBody(query.Coordinates ?? StreamCoordinates.Empty);

                var request = Request
                              .Post(url)
                              .WithContentTypeHeader(Constants.ContentTypes.OctetStream)
                              .WithContent(body);

                if (compressionEnabled)
                {
                    request = request.WithAcceptEncodingHeader(Constants.Compression.Lz4Encoding);
                }

                if (!string.IsNullOrEmpty(apiKey))
                {
                    request = request.WithHeader(Constants.HeaderNames.ApiKey, apiKey);
                }

                var result = await client
                             .SendAsync(request, timeout, cancellationToken : cancellationToken)
                             .ConfigureAwait(false);

                var operationStatus = responseAnalyzer.Analyze(result.Response, out var errorMessage);
                if (operationStatus != HerculesStatus.Success)
                {
                    if (result.Response.HasContent)
                    {
                        bufferPool.Return(result.Response.Content.Buffer);
                    }

                    return(new RawReadStreamResult(operationStatus, null, errorMessage));
                }

                return(new RawReadStreamResult(operationStatus, ParseReadResponseBody(result.Response)));
            }
            catch (Exception error)
            {
                log.Warn(error);
                return(new RawReadStreamResult(HerculesStatus.UnknownError, null, error.Message));
            }
        }
Пример #3
0
    void UdpReader()
    {
        while (true)
        {
            IPEndPoint remoteIpEndPoint = new IPEndPoint(System.Net.IPAddress.Any, 0);

            // Blocks until a message returns on this socket from a remote host.
            Byte[] receiveBytes = _client.Receive(ref remoteIpEndPoint);
            _responseAnalyzer.Analyze(new Event(new UDPPacket(receiveBytes)));
        }
    }
        /// <inheritdoc />
        public async Task <ReadTimelineResult <T> > ReadAsync(ReadTimelineQuery query, TimeSpan timeout, CancellationToken cancellationToken = default)
        {
            try
            {
                var url = new RequestUrlBuilder("timeline/read")
                {
                    { Constants.QueryParameters.Timeline, query.Name },
                    { Constants.QueryParameters.Limit, query.Limit },
                    { Constants.QueryParameters.ClientShard, query.ClientShard },
                    { Constants.QueryParameters.ClientShardCount, query.ClientShardCount },
                    { "from", EpochHelper.ToUnixTimeUtcTicks(query.From.UtcDateTime) },
                    { "to", EpochHelper.ToUnixTimeUtcTicks(query.To.UtcDateTime) }
                }
                .Build();

                var body = CreateRequestBody(query.Coordinates ?? TimelineCoordinates.Empty);

                var request = Request
                              .Post(url)
                              .WithContentTypeHeader(Constants.ContentTypes.OctetStream)
                              .WithContent(body);

                var result = await client
                             .SendAsync(request, timeout, cancellationToken : cancellationToken)
                             .ConfigureAwait(false);

                try
                {
                    var operationStatus = responseAnalyzer.Analyze(result.Response, out var errorMessage);
                    if (operationStatus != HerculesStatus.Success)
                    {
                        return(new ReadTimelineResult <T>(operationStatus, null, errorMessage));
                    }

                    return(new ReadTimelineResult <T>(operationStatus, ParseResponseBody(result.Response)));
                }
                finally
                {
                    if (result.Response.HasContent)
                    {
                        bufferPool.Return(result.Response.Content.Buffer);
                    }
                }
            }
            catch (Exception error)
            {
                log.Error(error);

                return(new ReadTimelineResult <T>(HerculesStatus.UnknownError, null, error.Message));
            }
        }
Пример #5
0
        private async Task <InsertEventsResult> SendAsync(
            [NotNull] string path,
            [NotNull] string stream,
            [CanBeNull] string apiKey,
            [NotNull] ValueDisposable <Content> content,
            TimeSpan timeout,
            CancellationToken cancellationToken)
        {
            try
            {
                var request = Request.Post(path)
                              .WithAdditionalQueryParameter(Constants.QueryParameters.Stream, stream)
                              .WithContentTypeHeader(Constants.ContentTypes.OctetStream);

                if (!string.IsNullOrEmpty(apiKey))
                {
                    request = request.WithHeader(Constants.HeaderNames.ApiKey, apiKey);
                }

                if (compressionEnabled)
                {
                    request = request
                              .WithContentEncodingHeader(Constants.Compression.Lz4Encoding)
                              .WithHeader(Constants.Compression.OriginalContentLengthHeaderName, content.Value.Length);
                    content = Compress(content);
                }

                request = request.WithContent(content.Value);

                var result = await client
                             .SendAsync(request, cancellationToken : cancellationToken, timeout : timeout)
                             .ConfigureAwait(false);

                var operationStatus = responseAnalyzer.Analyze(result.Response, out var errorMessage);

                return(new InsertEventsResult(operationStatus, errorMessage));
            }
            catch (Exception error)
            {
                log.Warn(error);
                return(new InsertEventsResult(HerculesStatus.UnknownError, error.Message));
            }
            finally
            {
                content.Dispose();
            }
        }