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); }