Esempio n. 1
0
        public V221OutputQuotedAssetSet GetPricingStructureV221(V221Header header, V221ProviderId provider, Guid requestId, string requestParams, string structureProperties)
        {
            IModuleInfo connection = null;

            _connectionIndex.Locked(connections =>
            {
                if (!connections.TryGetValue(header.SessionId, out connection))
                {
                    throw new ApplicationException("Ignoring request from unknown client!");
                }
            });
            //var errors = new List<V221ErrorDetail>();
            string step = "GetPricingStructureV221: unknown";

            try
            {
                step = "GetPricingStructureV221: calling GetPricingStructure";
                // run each provider request
                MDSProviderId defaultProvider     = V221Helpers.ToProviderId(provider);
                MDSResult <QuotedAssetSet> result = _providers[(int)defaultProvider].GetPricingStructure(
                    defaultProvider, connection, requestId, true,
                    new NamedValueSet(requestParams),
                    new NamedValueSet(structureProperties));
                step = "GetPricingStructureV221: compressing";
                return(new V221OutputQuotedAssetSet(
                           CompressionHelper.CompressToBuffer(XmlSerializerHelper.SerializeToString(result)),
                           null));
            }
            catch (Exception excp)
            {
                Logger.LogError("Exception: step='{0}': {1}", step, excp);
                return(new V221OutputQuotedAssetSet(null, new V221ErrorDetail(excp)));
            }
        }
Esempio n. 2
0
        public static MDSProviderId ToProviderId(V221ProviderId provider)
        {
            switch (provider)
            {
            case V221ProviderId.GlobalIB: return(MDSProviderId.GlobalIB);

            case V221ProviderId.Bloomberg: return(MDSProviderId.Bloomberg);

            //case V221ProviderId.ReutersIDN: return MDSProviderId.ReutersIDN;
            //case V221ProviderId.ReutersDTS: return MDSProviderId.ReutersDTS;
            case V221ProviderId.Simulator: return(MDSProviderId.Simulator);

            default:
                throw new NotSupportedException("V221ProviderId: " + provider.ToString());
            }
        }
Esempio n. 3
0
 public V221OutputQuotedAssetSet GetPricingStructureV221(V221Header header, V221ProviderId provider, Guid requestId, string requestParams, string structureProperties)
 {
     return(Channel.GetPricingStructureV221(header, provider, requestId, requestParams, structureProperties));
 }
Esempio n. 4
0
 public V221OutputQuotedAssetSet GetMarketQuotesV221(V221Header header, V221ProviderId v221Provider, Guid requestId, string requestParams, byte[] zsQuotedAssetSet)
 {
     return(Channel.GetMarketQuotesV221(header, v221Provider, requestId, requestParams, zsQuotedAssetSet));
 }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="header"></param>
        /// <param name="v221Provider"></param>
        /// <param name="requestId"></param>
        /// <param name="requestParams"></param>
        /// <param name="zsQuotedAssetSet"></param>
        /// <returns></returns>
        public V221OutputQuotedAssetSet GetMarketQuotesV221(V221Header header, V221ProviderId v221Provider, Guid requestId, string requestParams, byte[] zsQuotedAssetSet)
        {
            IModuleInfo connection = null;

            _connectionIndex.Locked(connections =>
            {
                if (!connections.TryGetValue(header.SessionId, out connection))
                {
                    throw new ApplicationException("Ignoring request from unknown client!");
                }
            });

            //var errors = new List<V221ErrorDetail>();
            var    result = new QuotedAssetSet();
            string step   = "GetMarketQuotesV221: unknown";

            try
            {
                step = "GetMarketQuotesV221: decompressing";
                // deserialise inputs
                var receivedRequest =
                    XmlSerializerHelper.DeserializeFromString <QuotedAssetSet>(CompressionHelper.DecompressToString(zsQuotedAssetSet));

                //debug dump request
                //this.Logger.LogDebug("Received: {0}", XmlSerializerHelper.SerializeToString<QuotedAssetSet>(receivedRequest));
                // end debug

                step = "GetMarketQuotesV221: splitting";
                // split request into provider-specific requests
                // build unique instrumentSet
                var instrumentMap = new Dictionary <string, Asset>();
                foreach (Asset asset in receivedRequest.instrumentSet.Items)
                {
                    string assetId = asset.id;
                    instrumentMap[assetId.ToLower()] = asset;
                }
                // now split quotes based on provider preferences
                MDSProviderId defaultProvider  = V221Helpers.ToProviderId(v221Provider);
                int           providerCount    = Enum.GetValues(typeof(MDSProviderId)).Length;
                var           providerRequests = new RequestContainer[providerCount];
                for (int i = 0; i < providerRequests.Length; i++)
                {
                    providerRequests[i] = new RequestContainer();
                }
                int requestedQuoteCount = 0;
                foreach (BasicAssetValuation valuation in receivedRequest.assetQuote)
                {
                    string assetId = valuation.objectReference.href;
                    if (!instrumentMap.TryGetValue(assetId.ToLower(), out var asset))
                    {
                        throw new ApplicationException($"Cannot find asset '{assetId}' in instrument set");
                    }
                    foreach (BasicQuotation quote in valuation.quote)
                    {
                        if (!quote.valueSpecified)
                        {
                            requestedQuoteCount++;
                            MDSProviderId    quoteProvider    = ChooseProvider(quote.informationSource, _activeProviders, defaultProvider);
                            RequestContainer requestContainer = providerRequests[(int)quoteProvider];
                            requestContainer.InstrumentMap[assetId.ToLower()] = asset;
                            // merge the quotes
                            if (!requestContainer.ValuationMap.TryGetValue(assetId.ToLower(), out var bav))
                            {
                                // missing - create
                                bav = new BasicAssetValuation {
                                    objectReference = new AnyAssetReference {
                                        href = assetId
                                    }
                                };
                                requestContainer.ValuationMap[assetId.ToLower()] = bav;
                            }
                            // append the asset quotes
                            var quotes = new List <BasicQuotation>();
                            if (bav.quote != null)
                            {
                                quotes.AddRange(bav.quote);
                            }
                            quotes.Add(quote);
                            bav.quote = quotes.ToArray();
                        }
                    }
                }
                if (requestedQuoteCount == 0)
                {
                    throw new ApplicationException("No quotes requested!");
                }

                step = "GetMarketQuotesV221: calling providers";
                // run each provider request
                foreach (MDSProviderId activeProvider in _activeProviders)
                {
                    RequestContainer requestContainer = providerRequests[(int)activeProvider];
                    if (requestContainer.InstrumentMap.Count > 0)
                    {
                        // request is not empty - call the MDS provider
                        var types = new List <ItemsChoiceType19>();
                        foreach (var asset in requestContainer.InstrumentMap.Values)
                        {
                            var assetTypeFpML = AssetTypeConvertor.ParseEnumStringToFpML(asset.id);//TODO The id must contain the asset descriptor.
                            types.Add(assetTypeFpML);
                        }
                        var instrumentSet = new InstrumentSet {
                            Items = requestContainer.InstrumentMap.Values.ToArray(), ItemsElementName = types.ToArray()
                        };
                        var providerRequest = new QuotedAssetSet
                        {
                            instrumentSet = instrumentSet,
                            assetQuote    = requestContainer.ValuationMap.Values.ToArray()
                        };
                        step = "GetMarketQuotesV221: calling " + activeProvider.ToString();
                        QuotedAssetSet providerResult = _providers[(int)activeProvider].GetMarketQuotes(
                            activeProvider, connection, requestId, true,
                            new NamedValueSet(requestParams),
                            providerRequest).Result;
                        // combine provider-specific results
                        result = result.Merge(providerResult, false, true, true);
                    }
                }
                step = "GetMarketQuotesV221: compressing";
                return(new V221OutputQuotedAssetSet(
                           CompressionHelper.CompressToBuffer(XmlSerializerHelper.SerializeToString(result)),
                           null));
            }
            catch (Exception excp)
            {
                Logger.LogError("Exception: step='{0}': {1}", step, excp);
                return(new V221OutputQuotedAssetSet(null, new V221ErrorDetail(excp)));
            }
        }