예제 #1
0
파일: Core.cs 프로젝트: sjdweb/lignite
        private void MarketProcessorThreadStatusChanged(object sender, MarketProcessorThreadStatusChangedEventArgs e)
        {
            if (e.status == MarketProcessorThreadStatus.CLOSED)
            {
                if (LigniteEngineThreads.ContainsKey(e.senderID))
                {
                    var senderId = e.senderID;
                    var thread   = LigniteEngineThreads[senderId];

                    var beforeremove = LigniteEngineThreads.Count;
                    LigniteEngineThreads.Remove(senderId);

                    if (beforeremove <= LigniteEngineThreads.Count)
                    {
                        SendMessage("Thread " + senderId + " not removed from LigniteEngineThreads!");
                    }

                    if (thread.ThreadState == ThreadState.Running)
                    {
                        Thread.Sleep(5);
                        SendMessage("Thread " + senderId + " not terminated!");
                    }
                }
            }

            if (OnMarketProcessorThreadStatusChanged != null)
            {
                OnMarketProcessorThreadStatusChanged(null, e);
            }
        }
예제 #2
0
파일: Core.cs 프로젝트: sjdweb/lignite
        /// <summary>
        /// The system initialization function, this preps and loads
        /// all the required child elements and services. It also does
        /// sanity check on the entire system
        /// </summary>
        /// <param name="configurationFile">The configuration file.</param>
        public void Start(string configurationFile)
        {
            try
            {
                // Write out to the console
                SendMessage("Lignite Engine Initializing");

                // Load the config settings
                settings = new XmlFileOperations().Read(configurationFile);

                // Load the Betfair data provider
                betfairAPI = new BetfairAPI(
                    settings.Betfair.Username,
                    settings.Betfair.Password,
                    settings.Betfair.ProductId,
                    settings.Betfair.VendorSoftwareId,
                    settings.Betfair.EndPointGlobalAPI,
                    settings.Betfair.EndPointExchangeAPIs[0],
                    settings.Betfair.EndPointExchangeAPIs[1],
                    settings.Betfair.AutoKeepAliveFrequency
                    );

                // make sure the hashtable used for thread tracking is empty and create instance
                if (LigniteEngineThreads != null)
                {
                    LigniteEngineThreads.Clear();
                }
                else
                {
                    LigniteEngineThreads = new Dictionary <string, Thread>();
                }

                // Start the timer
                EngineCoreTimer             = new Timer(100);
                __TimersElapsedEventHandler = OnTimedEvent;
                EngineCoreTimer.Elapsed    += __TimersElapsedEventHandler;
                EngineCoreTimer.Interval    = 100;
                EngineCoreTimer.Enabled     = true;

                // Start the market loader
                StartAutoMarketLoaderThread();

                //Load plugins
                Loadplugins();
            }
            catch (Exception ex)
            {
                SendMessage(String.Format("EXCEPTION: {0}", ex.Message));
            }
        }
예제 #3
0
파일: Core.cs 프로젝트: sjdweb/lignite
        private void StartAutoMarketLoaderThread()
        {
            // Declare the MarketLoader class to be threaded
            var marketLoader = new AutoMarketLoader(
                betfairAPI.GetSessionToken(),
                settings.GetAllMarketsConfiguration,
                settings.StrategyLoadPaterns);

            // Create the thread and start it
            var marketLoaderThread = new Thread(marketLoader.Start);

            marketLoaderThread.Start();

            // Now lets store the thread so that we can access it later
            LigniteEngineThreads.Add("MARKET_LOADER", marketLoaderThread);

            // Notify the user
            SendMessage(String.Format("MARKET_LOADER: Auto Market Loader Thread Started. {0}",
                                      LigniteEngineThreads.Count));
        }
예제 #4
0
파일: Core.cs 프로젝트: sjdweb/lignite
        private void StartMarketProcessorThread(int exchangeId, int marketId, StrategyLoadPatern strategy)
        {
            // Create the ID to use for this item
            var processId = String.Format("MARKET_PROCESSOR:{0}:{1}", exchangeId, marketId);

            if (LigniteEngineThreads.ContainsKey(processId))
            {
                return;
            }

            var market = new Market {
                exchangeId = exchangeId, marketId = marketId
            };

            // Make sure the requested strategy is complete, if not replace empty elements with the default config
            var defaultPatern = settings.GetDefaultStrategyLoadPatern();

            if (strategy.OnMarketLoadActions == null)
            {
                strategy.OnMarketLoadActions = defaultPatern.OnMarketLoadActions;
            }

            if (strategy.DataLoadPaterns.Default == null)
            {
                strategy.DataLoadPaterns.Default = defaultPatern.DataLoadPaterns.Default;
            }

            if (strategy.DataLoadPaterns.HasBets == null)
            {
                strategy.DataLoadPaterns.HasBets = defaultPatern.DataLoadPaterns.HasBets;
            }

            if (strategy.DataLoadPaterns.HasUnmatchedBets == null)
            {
                strategy.DataLoadPaterns.HasUnmatchedBets = defaultPatern.DataLoadPaterns.HasUnmatchedBets;
            }

            if (strategy.DataLoadPaterns.Inactive == null)
            {
                strategy.DataLoadPaterns.Inactive = defaultPatern.DataLoadPaterns.Inactive;
            }

            if (strategy.DataLoadPaterns.InPlay == null)
            {
                strategy.DataLoadPaterns.InPlay = defaultPatern.DataLoadPaterns.InPlay;
            }

            if (strategy.DataLoadPaterns.Suspended == null)
            {
                strategy.DataLoadPaterns.Suspended = defaultPatern.DataLoadPaterns.Suspended;
            }

            // Declare the MarketLoader class to be threaded
            var marketProcessor = new MarketProcessor(processId, market, strategy);

            // Create the thread and start it
            var marketProcessorThread = new Thread(marketProcessor.Start);

            marketProcessorThread.Start();

            // Now lets store the thread so that we can access it later
            LigniteEngineThreads.Add(processId, marketProcessorThread);

            // Notify the user
            SendMessage(String.Format("New market submitted for processing. ID = {0}", processId));
        }