static void Main(string[] args)
        {
            ActiveGridConnection connection = new ActiveGridConnection("http://localhost:5432/");

            bool cont = true;

            Task lookupPrices = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    foreach (var t in _tickers)
                    {
                        Task.Factory.StartNew((ticker) =>
                        {
                            string url = string.Format("http://www.google.com/ig/api?stock={0}", ticker);
                            WebClient webclient = new WebClient();
                            string response = webclient.DownloadString(url);

                            XDocument xdoc = XDocument.Parse(response);
                            XElement last = xdoc.Element("xml_api_reply").Element("finance").Element("last");
                            decimal price = decimal.Parse(last.Attribute("data").Value);
                            var updates = new GridUpdates();
                            updates.action = GridActionType.update;
                            updates.match = new { Ticker = ticker };
                            updates.item = new { Price = price };
                            connection.UpdateGrid(updates);
                        }, t);
                    }
                    Thread.Sleep(15000);
                }
            });

            while (cont)
            {
                Console.WriteLine("Enter a new ticker:");

                string input = Console.ReadLine();

                if (input.ToLower() == "exit")
                {
                    cont = false;
                }
                else if (input.ToLower() == "list")
                {
                    foreach (var ticker in _tickers)
                    {
                        Console.WriteLine(string.Format("Maintaining price for: {0}", ticker));
                    }
                }
                else
                {
                    if (_tickers.Where(t => t == input).Count() != 0)
                    {
                        continue;
                    }

                    _tickers.Add(input.Trim());
                }
            }
        }
 public void UpdateGrid(GridUpdates updates)
 {
     var hub = this.CreateProxy("activeGridHub");
     hub.Invoke("UpdateGrid", updates).ContinueWith(task =>
     {
         if (task.IsFaulted)
         {
             throw new GridUpdateException("There was an error calling updateGrid. See inner exception for details.", task.Exception.GetBaseException());
         }
     });
 }
        // POST /api/<controller>
        public void Post(Holding holding)
        {
            holding.HoldingId = Holdings.Data.Max(h => h.HoldingId);
            Holdings.Data.Add(holding);

            GridUpdates updates = new GridUpdates();
            updates.action = GridActionType.create;
            updates.match = "";
            updates.item = holding;

            string url = string.Format("{0}://{1}:{2}", this.Request.RequestUri.Scheme, this.Request.RequestUri.Host, this.Request.RequestUri.Port);
            ActiveGridConnection connection = new ActiveGridConnection(url);
            connection.UpdateGrid(updates);
        }