static async Task Main(string[] args) { var quitSignalled = new TaskCompletionSource <bool>(); Console.CancelKeyPress += new ConsoleCancelEventHandler((sender, eventArgs) => { quitSignalled.SetResult(true); eventArgs.Cancel = true; // Prevent program from quitting right away }); TriggerList tl = new TriggerList(); RabbitHelper.CreateConsumer(RunCommands, tl); Console.WriteLine("Twig running..."); Console.WriteLine("Press Ctrl-C to exit."); while (true) { var completed = await Task.WhenAny(quitSignalled.Task, Task.Delay(20000)); Console.WriteLine("Polling"); if (completed == quitSignalled.Task) { break; } var tasks = tl.Keys.Select(async sym => { if (tl[sym].ContainsKey("BUY")) { Trigger t = tl[sym]["BUY"].Max; if (t != null) { tl.CheckBuy(sym, await QuoteHelper.GetQuote(t.User, sym, t.Tid)); } } if (tl[sym].ContainsKey("SELL")) { Trigger t = tl[sym]["SELL"].Min; if (t != null) { tl.CheckSell(sym, await QuoteHelper.GetQuote(t.User, sym, t.Tid)); } } return; }); await Task.WhenAll(tasks); } Console.WriteLine("Quitting..."); Console.WriteLine("Done."); Environment.Exit(0); }
public void CheckSell(string Symbol, decimal StockPrice) { var SellStock = this[Symbol]["SELL"]; while (SellStock.Count > 0 && SellStock.Min.Price <= StockPrice) { var sell = SellStock.Min; JObject twigTrigger = new JObject(); JObject twigParams = new JObject(); twigTrigger.Add("usr", sell.User); twigTrigger.Add("cmd", "COMMIT_SELL_TRIGGER"); twigTrigger.Add("queue", sell.Queue); twigParams.Add("stock", Symbol); twigParams.Add("price", StockPrice); twigTrigger.Add("params", twigParams); RabbitHelper.PushTrigger(twigTrigger); SellStock.Remove(sell); } }
public void CheckBuy(string Symbol, decimal StockPrice) { var BuyStock = this[Symbol]["BUY"]; while (BuyStock.Count > 0 && BuyStock.Max.Price >= StockPrice) { var buy = BuyStock.Max; JObject twigTrigger = new JObject(); JObject twigParams = new JObject(); twigTrigger.Add("usr", buy.User); twigTrigger.Add("cmd", "COMMIT_BUY_TRIGGER"); twigTrigger.Add("queue", buy.Queue); twigParams.Add("stock", Symbol); twigParams.Add("price", StockPrice); twigTrigger.Add("params", twigParams); RabbitHelper.PushTrigger(twigTrigger); BuyStock.Remove(buy); } }