/// <summary> /// 创建市场组结点 /// </summary> /// <param name="marketGroups"></param> /// <param name="groupTypeIDs"></param> /// <param name="groupRootFolder"></param> private static void GenerateNode(Dictionary <int, NewMarketGroup> marketGroups, Dictionary <int, List <NewTypeID> > groupTypeIDs, Dictionary <int, MarketGroupNode> groupRootFolder) { // 组内层级关系确立 var tmpMarketGroups = CopyTools.DeepByBinaryFormatter(marketGroups); try { foreach (var kvg in marketGroups) { // 拿到ID与组实例 var id = kvg.Key; var group = kvg.Value; // 创建树状图节点 var node = new MarketGroupNode(group, true); // 如果这个组内有item成员,则创建特殊组,成员为item if (group.hasTypes) { groupTypeIDs.TryGetValue(id, out var typeLst); node.AddMarketGroup(typeLst); } // 根结点并非一个, if (group.parentGroupID == 0) { groupRootFolder.Add(id, node); // 处理最上层的根节点 tmpMarketGroups.Remove(kvg.Value.ID); } else // 否则,寻找父组添加到其内 { foreach (var leaf in groupRootFolder) { if (Search(leaf.Value, node, tmpMarketGroups)) { break; } } } } } catch (Exception e) { System.Windows.MessageBox.Show(e.Message); } //MessageBox.Show(marketGroups.Count.ToString()); if (marketGroups.Count > 0) { GenerateNode(tmpMarketGroups, groupTypeIDs, groupRootFolder); } }
/// <summary> /// 找寻市场组子节点 /// </summary> /// <param name="find"></param> /// <param name="add"></param> /// <returns></returns> private static bool Search(MarketGroupNode find, MarketGroupNode add, Dictionary <int, NewMarketGroup> tmpMarketGroups) { if (find.IsGroup) // 只有包含子物体的组允许访问 { if (find.Group.ID == add.Group.parentGroupID) // 找到了则添加进去 { if (add != null) { find.AddMarketGroup(add); } tmpMarketGroups.Remove(add.Group.ID); return(true); } else { foreach (var findChild in find.ChildrensDcit.Values) // 否则继续找 { Search(findChild, add, tmpMarketGroups); } } } return(false); }
public override void QueryStart(object parameter) { _groupNode = parameter as MarketGroupNode; if (_groupNode != null && !querying) { try { var ids = GetIDs(); StatusManager.GetManager()?.ShowMsg("获取服务器数据中....."); counter = 0; times = ids.Count; querying = true; _queryMarketGroupResults = new List <MarketGroupTypeShow>(); foreach (var idStr in ids) { if (string.IsNullOrEmpty(idStr)) { times--; if (times <= 0) { StatusManager.GetManager()?.ShowMsg("没有匹配到请求的数据,本次请求取消,检查物品类型....."); querying = false; return; } continue; } new Thread(new ThreadStart(() => { HttpRequestManager.SetQueryPost(idStr, RegionGalaxyID.MarketGroupRegionID, RegionGalaxyID.MarketGroupGalaxyID); HttpRequestManager.Post("NULL", QueryMarketGroupCompleteMuti); })).Start(); Thread.Sleep(100); } } catch { } } }
public MainWindow() { InitializeComponent(); using (var ele = new eveLocationEntities()) { #region Regions var regions = ele.mapRegions; regions.Load(); foreach (var region in regions) { var node = new RegionNode { Name = region.regionName, NodeID = region.regionID, IsSelected = false }; _locationNodes.Nodes.Add(node); } #endregion #region Systems var systems = ele.mapSolarSystems; systems.Load(); foreach (var system in systems) { var node = new SystemNode { Name = system.solarSystemName, NodeID = system.solarSystemID, ParentNodeID = system.regionID, IsFiltered = false }; _locationNodes.Nodes.Add(node); } #endregion } using (var eie = new eveInventoryEntities()) { #region Market Groups var groups = eie.invMarketGroups; groups.Load(); //var groups = _eaw.GetMarketGroups().Result; foreach (var group in groups) { //var tmp = @group.ParentGroup?.InferredId ?? 0; var node = new MarketGroupNode { Name = group.marketGroupName, NodeID = group.marketGroupID, ParentNodeID = group.parentGroupID }; _marketItemNodes.Nodes.Add(node); } #endregion #region Market Items var items = eie.invTypes; items.Load(); //var items = _eaw.GetMarketTypes().Result; foreach (var item in items) { switch (item.marketGroupID) { case 2155: continue; case null: continue; case 354496: continue; case 354341: continue; case 356922: continue; case 354395: continue; case 354396: continue; } var node = new MarketItemNode { Name = item.typeName, NodeID = item.typeID + 2000000000000000, ParentNodeID = item.marketGroupID }; _marketItemNodes.Nodes.Add(node); } #endregion } locationTreeView.ItemsSource = _locationNodes.Nodes; locationTreeView.Columns["Name"].SortOrder = ColumnSortOrder.Ascending; locationTreeView.View.NodeChanged += NodeChecked; marketItemTreeView.ItemsSource = _marketItemNodes.Nodes; marketItemTreeView.Columns["Name"].SortOrder = ColumnSortOrder.Ascending; }