Exemplo n.º 1
0
        public void Subscribe(string portfolioId)
        {
            if (!PortfolioFeedSimulator.CheckPortfolio(portfolioId))
            {
                throw new SubscriptionException("No such portfolio: "
                                                + portfolioId);
            }

            // Complete the subscription operation asynchronously
            executor.Add(delegate()
            {
                Debug.Assert(!subscriptions.ContainsKey(portfolioId));

                Portfolio portfolio = feed.GetPortfolio(portfolioId);
                if (portfolio == null)
                {
                    _log.Error("No such portfolio: " + portfolioId);
                    Debug.Assert(false);
                    return;
                }
                // Add the new item to the list of subscribed items;
                // the "true" value is a placeholder, as we use a Hashtable.
                subscriptions.Add(portfolioId, true);

                // Create a new listener for the portfolio
                MyPortfolioListener listener = new MyPortfolioListener(portfolioId, this);
                // Set the listener on the feed
                portfolio.SetListener(listener);

                _log.Info(portfolioId + " subscribed");
            });
        }
        public static void Main(string[] args)
        {
            var config = new NLog.Config.LoggingConfiguration();

            var logfile = new NLog.Targets.FileTarget("logfile")
            {
                FileName = "TestAdapter.log"
            };
            var logconsole = new NLog.Targets.ConsoleTarget("logconsole");

            config.AddRule(LogLevel.Debug, LogLevel.Fatal, logconsole);
            config.AddRule(LogLevel.Info, LogLevel.Fatal, logfile);

            NLog.LogManager.Configuration = config;

            if (args.Length == 0)
            {
                Help();
            }

            _log.Info("Lightstreamer PortfolioDemo .NET Adapter Custom Server starting...");

            Server.SetLoggerProvider(new Log4NetLoggerProviderWrapper());

            IDictionary parameters = new Hashtable();
            string      host       = null;
            int         rrPortMD   = -1;
            int         rrPortD    = -1;
            int         notifPortD = -1;
            string      name       = null;

            for (int i = 0; i < args.Length; i++)
            {
                string arg = args[i];

                if (arg.StartsWith(PREFIX1) || arg.StartsWith(PREFIX2))
                {
                    arg = arg.Substring(1).ToLower();

                    if (arg.Equals(ARG_HELP_SHORT) || arg.Equals(ARG_HELP_LONG))
                    {
                        Help();
                    }
                    else if (arg.Equals(ARG_HOST))
                    {
                        i++;
                        host = args[i];

                        _log.Debug("Found argument: '" + ARG_HOST + "' with value: '" + host + "'");
                    }
                    else if (arg.Equals(ARG_METADATA_RR_PORT))
                    {
                        i++;
                        rrPortMD = Int32.Parse(args[i]);

                        _log.Debug("Found argument: '" + ARG_METADATA_RR_PORT + "' with value: '" + rrPortMD + "'");
                    }
                    else if (arg.Equals(ARG_DATA_RR_PORT))
                    {
                        i++;
                        rrPortD = Int32.Parse(args[i]);

                        _log.Debug("Found argument: '" + ARG_DATA_RR_PORT + "' with value: '" + rrPortD + "'");
                    }
                    else if (arg.Equals(ARG_DATA_NOTIF_PORT))
                    {
                        i++;
                        notifPortD = Int32.Parse(args[i]);

                        _log.Debug("Found argument: '" + ARG_DATA_NOTIF_PORT + "' with value: '" + notifPortD + "'");
                    }
                    else if (arg.Equals(ARG_NAME))
                    {
                        i++;
                        name = args[i];

                        _log.Debug("Found argument: '" + ARG_NAME + "' with value: '" + name + "'");
                    }
                }
                else
                {
                    int sep = arg.IndexOf(SEP);
                    if (sep < 1)
                    {
                        _log.Warn("Skipping unrecognizable argument: '" + arg + "'");
                    }
                    else
                    {
                        string par = arg.Substring(0, sep).Trim();
                        string val = arg.Substring(sep + 1).Trim();
                        parameters[par] = val;

                        _log.Debug("Found parameter: '" + par + "' with value: '" + val + "'");
                    }
                }
            }

            PortfolioFeedSimulator feed = new PortfolioFeedSimulator();

            // A reference to the feed simulator will be supplied
            // to both the Data and the Matedata Adapters.

            try
            {
                {
                    MetadataProviderServer server = new MetadataProviderServer();
                    Lightstreamer.Adapters.PortfolioDemo.Metadata.PortfolioMetadataAdapter adapter =
                        new Lightstreamer.Adapters.PortfolioDemo.Metadata.PortfolioMetadataAdapter();
                    // We complete the Metadata Adapter initialization by supplying
                    // a reference to the feed simulator through a custom method;
                    // for this reason, the Portfolio Demo Metadata Adapter
                    // does not support the basic DotNetServer.exe launcher
                    // provided by LS library,
                    adapter.SetFeed(feed);

                    server.Adapter       = adapter;
                    server.AdapterParams = parameters;
                    // server.AdapterConfig not needed by PortfolioMetadataAdapter
                    if (name != null)
                    {
                        server.Name = name;
                    }
                    _log.Debug("Remote Metadata Adapter initialized");

                    ServerStarter starter = new ServerStarter(host, rrPortMD, -1);
                    starter.Launch(server);
                }

                {
                    DataProviderServer server = new DataProviderServer();
                    Lightstreamer.Adapters.PortfolioDemo.Data.PortfolioAdapter adapter =
                        new Lightstreamer.Adapters.PortfolioDemo.Data.PortfolioAdapter();
                    // We complete the Data Adapter initialization by supplying
                    // a reference to the feed simulator through a custom method;
                    // for this reason, the Portfolio Demo Data Adapter
                    // does not support the basic DotNetServer.exe launcher
                    // provided by LS library,
                    adapter.SetFeed(feed);

                    server.Adapter = adapter;
                    // server.AdapterParams not needed by PortfolioAdapter
                    // server.AdapterConfig not needed by PortfolioAdapter
                    if (name != null)
                    {
                        server.Name = name;
                    }
                    _log.Debug("Remote Data Adapter initialized");

                    ServerStarter starter = new ServerStarter(host, rrPortD, notifPortD);
                    starter.Launch(server);
                }
            }
            catch (Exception e)
            {
                _log.Fatal("Exception caught while starting the server: " + e.Message + ", aborting...", e);
            }

            _log.Info("Lightstreamer PortfolioDemo .NET Adapter Custom Server running");
        }
 public void SetFeed(PortfolioFeedSimulator simulator)
 {
     this.portfolioFeed = simulator;
 }