private void start() { //Loading system startup data for all the exchanges List <Exchange> exchanges = new List <Exchange>(); exchanges.Add(Exchange.FAKE_NASDAQ); InMemoryObjects.LoadInMemoryObjects(exchanges); //Initiate fake data generation from fake market //Later it will also include data generation from google finance TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD); FakeDataGenerator.StartFakeDataGeneration(300); IFeeder feeder = FeederFactory.GetFeeder(FeederSourceSystem.FAKEMARKET); ISender sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE); List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == Exchange.FAKE_NASDAQ).Symbols; while (true) { Parallel.ForEach(symbols, (symbol) => { feedList = feeder.GetFeedList(symbol.Id, 1, 10); // Get the list of values for a given symbolId of a market for given time-span sender.SendFeed(feedList); }); } }
/// <summary> /// Application arguments: /// arg0: Selected Exchange. Has to be enum StockModel.Master.Exchange /// arg1: Data generator to use. Has to be IDataPublisher. /// </summary> /// <param name="args"></param> static void Main(string[] args) { //Loading system startup data for all the exchanges List <Exchange> exchanges = new List <Exchange>(); //defaults selected... selectedExchange = Exchange.FAKE_NASDAQ; dataGenerator = YahooDataGenerator.Instance; ResolveAppArgs(args); exchanges = Enum.GetValues(typeof(Exchange)).OfType <Exchange>().ToList(); InMemoryObjects.LoadInMemoryObjects(exchanges); TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD); //Start data generation - this will start fetching data for all symbols of current exchange //Later, need to change this to only subscribe to the specific symbol(s) selected. dataGenerator.StartDataGeneration(300, selectedExchange); sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE); List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == selectedExchange).Symbols; List <SymbolFeeds> generatedData = new List <SymbolFeeds>(); List <StockModel.Symbol> symbolList = new List <StockModel.Symbol>(); Action <double, string> addMovingAverage = new Action <double, string>((val, MVA_id) => { sender.SendMVA(val, MVA_id); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Sent value {0} to redis", val); Console.ResetColor(); }); Parallel.ForEach(symbols, (symbol) => { //subscribe dataGenerator.SubscribeFeed(symbol.Id, (Feed fd) => { sender.SendFeed(fd, selectedExchange.ToString()); Console.WriteLine(fd.ToString()); }); //add subscription for each aggregator configured //RXProcessing.AddAggregator(dataGenerator, new MovingAverage(), // addMovingAverage // , symbol.Id); }); Console.Read(); }
private static void SubscribeRedis() { ConnectionMultiplexer connection = null; connection = GetRedisConnection(); ISubscriber sub = connection.GetSubscriber(); sub.Subscribe(_exchange, (channel, message) => { lock (_lockQueue) { byte[] binary = Convert.FromBase64String(message); MemoryStream stream = new MemoryStream(binary); Feed feed = (Feed)ObjectSerialization.DeserializeFromStream(stream); //send to NEsper _runtime.SendEvent(feed); } }); sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE); }
public IMessageSender ResolveSender(Employee emp) { return(SenderFactory.GetSender(emp)); }
private static void Start() { _LTPStack = new Dictionary <string, Queue <double> >(); ISender sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE); _sum = new Dictionary <string, double>(); ConnectionMultiplexer connection = null; connection = GetRedisConnection(); ISubscriber sub = connection.GetSubscriber(); Feed feed = null; byte[] binary = null; MemoryStream stream = null; sub.Subscribe(_exchange, (channel, message) => { lock (_lockQueue) { string str = message; binary = Convert.FromBase64String(message); stream = new MemoryStream(binary); feed = (Feed)ObjectSerialization.DeserializeFromStream(stream); string currentSymbolId = feed.SymbolId.ToString(); if (_sum.ContainsKey(currentSymbolId)) { _sum[currentSymbolId] += feed.LTP; } else { _sum.Add(currentSymbolId, feed.LTP); } if (_LTPStack.ContainsKey(currentSymbolId)) { _LTPStack[currentSymbolId].Enqueue(feed.LTP); } else { Queue <double> q = new Queue <double>(); q.Enqueue(feed.LTP); _LTPStack.Add(currentSymbolId, q); } if (_LTPStack[currentSymbolId].Count > n) { _sum[currentSymbolId] -= _LTPStack[currentSymbolId].Dequeue(); } //Publish MVA double mva = _sum[currentSymbolId] / _LTPStack[currentSymbolId].Count(); sender.SendMVA(mva, _channelName + currentSymbolId); Console.WriteLine("Symbol id {0} published aggregate {1} to channel {2}", feed.SymbolId, mva, _channelName + currentSymbolId); } }); }