//thats the main configuration function private XchangeDescriptor[] ReadExchangeDescriptorConfiguration(IConfiguration section) { var descriptors = section.GetChildren(); int exchangeConfigs = descriptors.Count(); XchangeDescriptor[] exchanges = new XchangeDescriptor[exchangeConfigs + 1]; if (exchangeConfigs == 0) { return(exchanges); } foreach (var exchange in descriptors) { var exchangeDescriptor = new XchangeDescriptor(); exchangeDescriptor.Name = exchange.GetValue <string>("Name"); exchangeDescriptor.BaseUrl = exchange.GetValue <string>("BaseUrl"); exchangeDescriptor.ApiKeyString = exchange.GetValue <string>("ApiKeyString"); exchangeDescriptor.SignString = exchange.GetValue <string>("SignString"); exchangeDescriptor.TimeStampString = exchange.GetValue <string>("TimeStampString"); var exchangeEnum = Enum.Parse <Xchange>(exchangeDescriptor.Name); exchangeDescriptor.Id = (int)exchangeEnum; exchangeDescriptor.DomainTypes = XchangeConfigToolkit.GenerateTypesDictionary(_dataTypes, exchange.GetSection("DomainTypes")); exchangeDescriptor.EndPoints = GeneratingEndPoints(exchange, exchangeDescriptor.BaseUrl); exchangeDescriptor.SetEndPointReturnTypes(); exchangeDescriptor.SocketDescriptor = ReadSocketConfig(exchange); //not tested and not needed yet! exchangeDescriptor.SocketDescriptor.TypeDescriptors = XchangeConfigToolkit.GenerateTypesDictionary(_dataTypes, exchange.GetSection("Socket:Types")); exchangeDescriptor.SocketDescriptor.Xchange = exchangeEnum; exchangeDescriptor.SocketDescriptor.SubscriptionArgs.Each(s => s.Value.ReturnType = exchangeDescriptor.DomainTypes.GetValueOrDefault(s.Key)); if (VerifyExchangeDescriptor(exchangeDescriptor)) { exchanges[exchangeDescriptor.Id] = exchangeDescriptor; } } return(exchanges); }
/// <summary> /// returns array of valid endpoints /// </summary> /// <param name="endPoints"></param> /// <returns></returns> private static EndPoint[] GeneratingEndPoints(IConfigurationSection exchange, string baseUrl) { var endPoints = XchangeConfigToolkit.ReadExchangeEndPoints(null, exchange.GetSection("Routes")); var endPointArray = new EndPoint[typeof(XchangeHttpOperation).GetTypeInfo().Fields().Length + 1]; foreach (var eP in endPoints) { eP.Value.Url = $"{baseUrl}{eP.Value.Url}"; var operation = XchangeHttpOperation.Unknown; if (Enum.TryParse <XchangeHttpOperation>(eP.Key, out operation)) { endPointArray[(int)operation] = eP.Value; continue; } endPointArray[(int)operation] = eP.Value; } return(endPointArray); }
public XchangeDescriptorConfig(IConfiguration config) { _config = config.GetSection("ExchangeDescriptors"); _dataTypes = XchangeConfigToolkit.GenerateTypeDictionary(); _exchangeDescriptors = ReadExchangeDescriptorConfiguration(_config); }