/// <summary> /// Отправить всем продюссерам /// </summary> public async Task <IList <Result <string, ErrorWrapper> > > SendAll(ResponsePieceOfDataWrapper <TIn> response, string invokerName = null) { //TODO: используя _unionOption.InterpreterTypeName интерпретировать message в этот тип и пережать как ответ. var message = ConvertResponse(_unionOption.ConverterName, response); var tasks = _produsersDict.Values.Select(produserOwner => produserOwner.Produser.Send(message, invokerName)).ToList(); var results = await Task.WhenAll(tasks); return(results); }
private async void TransportResponseChangeRxEventHandler(ResponsePieceOfDataWrapper <TIn> responsePieceOfDataWrapper) { var settings = new JsonSerializerSettings { Formatting = Formatting.Indented, //Отступы дочерних элементов NullValueHandling = NullValueHandling.Ignore //Игнорировать пустые теги }; var jsonResp = JsonConvert.SerializeObject(responsePieceOfDataWrapper, settings); //await Send2Produder(Option.TopicName4MessageBroker, $"ResponseDataWrapper = {jsonResp}"); _logger.Debug($"TransportResponseChangeRxEventHandler. jsonResp = {jsonResp} "); }
/// <summary> /// Отправить продюсеру по ключу /// </summary> public async Task <Result <string, ErrorWrapper> > Send(string key, ResponsePieceOfDataWrapper <TIn> response, string invokerName = null) { if (!_produsersDict.ContainsKey(key)) { throw new KeyNotFoundException(key); } var message = Convert2RawJson(response); var result = await _produsersDict[key].Produser.Send(message, invokerName); return(result); }
private static string ConvertResponse(string converterName, ResponsePieceOfDataWrapper <TIn> response) { object convertedResp = null; switch (converterName) { case "Full": convertedResp = response; break; case "Medium": convertedResp = new { response.DeviceName, response.DataAction, response.ExceptionExchangePipline, response.IsValidAll, response.TimeAction, ResponsesItems = response.ResponsesItems.Select(item => new { item.RequestId, item.Status, item.StatusStr, item.TransportException, item.ResponseInfo }).ToList() }; break; case "Lite": convertedResp = new { response.DeviceName, response.ExceptionExchangePipline, response.IsValidAll, response.TimeAction, ResponsesItems = response.ResponsesItems.Select(item => new { item.RequestId, item.StatusStr, item.TransportException, item.ResponseInfo.StronglyTypedResponse }).ToList() }; break; } var message = Convert2RawJson(convertedResp); return(message); }
public async Task Execute() { try { var resp = new ResponsePieceOfDataWrapper <AdInputTypeFake>() { DataAction = DataAction.CycleAction, DeviceName = "Device_1", ExceptionExchangePipline = null, IsValidAll = true, KeyExchange = "Exchange111", TimeAction = 2000, MessageDict = new Dictionary <string, string>() { { "key1", "value1" }, { "key2", "value2" }, { "key3", "value3" } }, ResponsesItems = new List <ResponseDataItem <AdInputTypeFake> >() { new ResponseDataItem <AdInputTypeFake> { RequestId = "10", ResponseInfo = new ResponseInfo { Encoding = "Utf-8", IsOutDataValid = true, ResponseData = "56345653455654353453453", StronglyTypedResponse = null }, Status = StatusDataExchange.End, TransportException = null, MessageDict = null } } }; var res = await _produsersUnion.SendAll(resp); // TODO: Задавать invokerName= deviceName } catch (Exception e) { Console.WriteLine(e); throw; } }