private static UsageLimitMessage UsageLimitMessageThrowsException(ReadingMessage request)
        {
            var result = new UsageLimitMessage()
            {
                CustomerId   = request.CustomerId,
                MobileNumber = request.MobileNumber
            };

            if (request.DataUsage < MaxDataUsage && request.ReadingTime.ToDateTime().ToUniversalTime() == DateTime.UtcNow)
            {
                result.ContinueUsage = ContinueService.Yes;
                result.RemainingData = 0;
            }
            else if (Math.Abs(request.DataUsage - MaxDataUsage) < tolerance && request.ReadingTime.ToDateTime().ToUniversalTime() == DateTime.UtcNow)
            {
                result.ContinueUsage = ContinueService.No;
                result.RemainingData = 0;
            }
            else
            {
                var additionalInfo = new Metadata()
                {
                    new Metadata.Entry("Time", DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)),
                    new Metadata.Entry("exception_cause", "Data usage exceeded."),
                };

                throw new RpcException(new Status(StatusCode.Cancelled, "Data usage has reached at the peak, Can not continue the data usage."), additionalInfo);
            }

            return(result);
        }
 public Task<ReadingMessage> GetReadings(int customerId)
 {
     var readingMessage = new ReadingMessage
     {
         CustomerId = customerId,
         ReadingTime = Timestamp.FromDateTime(DateTime.UtcNow),
         ReadingValue = new Random().Next(10000)
     };
     return Task.FromResult(readingMessage);
 }
Example #3
0
        public Task <ReadingMessage> Generate(int customerId)
        {
            var reading = new ReadingMessage()
            {
                CustomerId   = customerId,
                ReadingValue = new Random().Next(10000),
                ReadingTime  = Timestamp.FromDateTime(DateTime.UtcNow)
            };

            return(Task.FromResult(reading));
        }
Example #4
0
        public Task <ReadingMessage> Generate(int customerId)
        {
            var reading = new ReadingMessage
            {
                CustomerId   = customerId,
                ReadingValue = new Random().Next(1000),
                ReadingTime  = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow)
            };

            return(Task.FromResult(reading));
        }
        public static Task <ReadingMessage> GetMessage()
        {
            var reading = new ReadingMessage()
            {
                CustomerId   = 1,
                DataUsage    = 1000 + new Random().Next(512),
                ReadingTime  = Timestamp.FromDateTime(DateTime.UtcNow),
                MobileNumber = "9766676869"
            };

            return(Task.FromResult(reading));
        }
 public override Task <UsageLimitMessage> UpdateUsage(ReadingMessage request,
                                                      ServerCallContext context)
 {
     try
     {
         var result = UsageLimitMessageThrowsException(request);
         return(Task.FromResult(result));
     }
     catch (Exception e)
     {
         _logger.LogError(e.Message);
         throw;
     }
 }
        private static UsageLimitMessage UsageLimitMessage(ReadingMessage request)
        {
            var result = new UsageLimitMessage()
            {
                CustomerId   = request.CustomerId,
                MobileNumber = request.MobileNumber
            };

            if (request.DataUsage <= MaxDataUsage && request.ReadingTime.ToDateTime().ToUniversalTime() == DateTime.UtcNow)
            {
                result.ContinueUsage = ContinueService.Yes;
                result.RemainingData = 0;
            }
            else
            {
                result.ContinueUsage = ContinueService.No;
                result.RemainingData = 0;
            }

            return(result);
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var counter    = 0;
            var customerId = _configuration.GetValue <int>("Service:CustomerId");


            while (!stoppingToken.IsCancellationRequested)
            {
                counter++;

                //if (counter % 10 == 0)
                //{
                //    Console.WriteLine("Sending Diagnostics");
                //    var stream = Client.SendDiagnostics();
                //    for (int i = 0; i < 5; i++)
                //    {
                //        var readingRes = await _factory.Generate(customerId);
                //        await stream.RequestStream.WriteAsync(readingRes);
                //    }

                //    await stream.RequestStream.CompleteAsync();
                //}

                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);


                var pkt = new ReadingPacket()
                {
                    Successful = ReadingStatus.Success,
                    Notes      = "This is our test"
                };

                var reading = new ReadingMessage();
                reading.CustomerId   = customerId;
                reading.ReadingValue = 10000;
                reading.ReadingTime  = Timestamp.FromDateTime(DateTime.UtcNow);

                for (int i = 0; i < 5; i++)
                {
                    pkt.Readings.Add(await _factory.Generate(customerId));
                }

                try
                {
                    //if (!NeedsLogin() || await GenerateToken())
                    //{
                    //    var headers = new Metadata();
                    //    headers.Add("Authorization", $"Bearer {_token}");

                    var result = await Client.AddReadingAsync(pkt); // headers: headers);

                    if (result.Successful == ReadingStatus.Success)
                    {
                        _logger.LogInformation("Successfully sent");
                    }
                    else
                    {
                        _logger.LogInformation("Failed to send");
                    }
                    //}
                }
                catch (RpcException ex)
                {
                    if (ex.StatusCode == StatusCode.OutOfRange)
                    {
                        _logger.LogError($"{ex.Trailers}");
                    }
                    _logger.LogError($"Exception Thrown: {ex}");
                }

                await Task.Delay(_configuration.GetValue <int>("Service:DelayInterval"), stoppingToken);
            }
        }
Example #9
0
 public ReadMessageService(ReadingMessage readingMessage)
 {
     ReadingMessage = readingMessage;
 }