Example #1
0
        public async Task <bool> ProcessNextRequest()
        {
            var msg = await _incomeQueue.PeekRawMessageAsync();

            if (msg == null)
            {
                return(false);
            }

            await _logger.WriteInfo("RouteService", "ProcessNextRequest", "", "New request -" + msg.AsString);

            var request = msg.AsString.DeserializeJson <Request>();

            var blockchain = await DetermineBlockChain(request);

            if (blockchain == null)
            {
                await FinishMessage();

                return(true);
            }

            var converter = _convertersFactory(blockchain);

            if (converter == null)
            {
                throw new Exception("Unregistered converter for blockchain - " + blockchain);
            }
            var message = converter.CreateCommandMessage(request);

            await _logger.WriteInfo("RouteService", "ProcessNextRequest", "", "Converted message -" + message);

            var sender = _commandSenderFactory(blockchain);

            if (sender == null)
            {
                throw new Exception("Unregistered command sender for blockchain - " + blockchain);
            }
            await sender.SendCommandAsync(message);


            await _logger.WriteInfo("RouteService", "ProcessNextRequest", "", "Message sent to blockchain successfuly");

            await FinishMessage();

            return(true);
        }