Ejemplo n.º 1
0
        public void refreshTrains()
        {
            lock (this)
            {
                if (!String.IsNullOrEmpty(id_))
                {
                    JArray tok = commander_.exec <JArray>("TrainInterface", "getTrains", true, id_);

                    if (tok != null)
                    {
                        JEnumerable <JToken> children = tok.Children();
                        HashSet <string>     seen     = new HashSet <string>();
                        foreach (JToken child in children)
                        {
                            if (child is JObject)
                            {
                                string id = child["ID"].ToString();
                                seen.Add(id);
                                Train train = null;
                                if (trains_.Any(t => t.Id == id))
                                {
                                    train = trains_.First(t => t.Id == id);
                                    train.refresh(child);
                                }
                                else
                                {
                                    train = new Train(commander_, child);
                                    trains_.Add(train);
                                }
                            }
                            else
                            {
                                Debug.Print("Unexpected data in get all trains responce:\n{0}", child.ToString());
                            }
                        }
                        IEnumerable <Train> deleted = trains_.Where(t => !seen.Contains(t.Id));
                        //Debug.Print("Removed trains count {0}", deleted.Count());
                        foreach (Train old in deleted)
                        {
                            trains_.Remove(old);
                        }

                        Dictionary <string, int> routes = new Dictionary <string, int>();

                        foreach (Train train in trains_)
                        {
                            string loadSummary = train.Load.ToString();
                            if (routes.ContainsKey(loadSummary))
                            {
                                routes[loadSummary] += 1;
                            }
                            else
                            {
                                routes.Add(loadSummary, 1);
                            }
                        }

                        StringBuilder summary = new StringBuilder();
                        foreach (KeyValuePair <string, int> rt in routes)
                        {
                            if (summary.Length > 0)
                            {
                                summary.Append("\n");
                            }
                            summary.Append(String.Format("{0} - {1}", rt.Key, rt.Value));
                        }

                        RouteSummary = summary.ToString();

                        OnPropertyChanged("TrainList");
                        OnPropertyChanged("AvgReliability");
                        refreshWaggons();
                    }
                }
            }
        }