private void AddDependence(object sender, RoutedEventArgs e) { var depObj = cbDepObj.SelectedItem as DependenceObject; var dependency = cbDependency.SelectedItem as DependenceObject; if (depObj == null || dependency == null) { return; } var curDepObj = dB.Dependencies .SingleOrDefault(d => d.ЗависимыйОбъект.ObjectType == depObj.ObjectType && d.ЗависимыйОбъект.ObjectName == depObj.ObjectName); if (curDepObj != null) { var curDependency = curDepObj.Зависимости .SingleOrDefault(d => d.ObjectType == dependency.ObjectType && d.ObjectName == dependency.ObjectName); if (curDependency == null) { curDepObj.Зависимости.Add(dependency); } } else { var NewDependence = new Dependence(); NewDependence.ЗависимыйОбъект = depObj; NewDependence.Зависимости.Add(dependency); dB.Dependencies.Add(NewDependence); } }
public Task Build() { if (_buildTask != null) // Concurrent builds may still occur, but for simplicity reasons I've chosen to ignore this case. { return(_buildTask); } if (Dependence.Count == 0) { return(Task.Run(() => { if (!IsBuilt) { Thread.Sleep(1000); Console.WriteLine("Build " + ID); IsBuilt = true; } })); } var dependenciesTask = Dependence.Select(dependency => dependency.Build()).ToArray(); _buildTask = Task.Factory.ContinueWhenAll(dependenciesTask, tasks => { if (!IsBuilt) { Thread.Sleep(1000); Console.WriteLine("Build " + ID); IsBuilt = true; } }); return(_buildTask); }
static void Main(string[] args) { function fnc = new function(DateTime.Now, e_Direction.Fixed); Dependence dpn = new Dependence(DateTime.Now, e_Direction.Fixed, e_Dot.Start); dpn.SetDirection(fnc.GetDirection); dpn.SetDate(fnc.GetDate); #region Вспомогательные функции Action<string, string, string> dOut = (Obj, Old, New) => { Console.WriteLine ("Dependance changed: {0}\noldValue: {1}\nnewValue: {2}", Obj, Old, New); }; #endregion #region Функции для подписки Func<EventHandler<ea_ValueChange<e_Direction>>, Action> fncDir = (eHnd) => { fnc.event_DirectionChanged += eHnd; return () => fnc.event_DirectionChanged -= eHnd; }; Func<EventHandler<ea_ValueChange<DateTime>>, Action> fncDate = (eHnd) => { fnc.event_DateChanged += eHnd; return () => fnc.event_DateChanged -= eHnd; }; #endregion #region Автообновление зависимости dpn.setAutoupdate(fncDate, fncDir); #endregion #region отслеживание dpn.event_DependDotChanged += (s, e) => { dOut("dependDot", e.OldValue.ToString(), e.NewValue.ToString()); }; dpn.event_DateChanged += (s, e) => { dOut("manageDate", e.OldValue.ToString(), e.NewValue.ToString()); }; dpn.event_DirectionChanged += (s, e) => { dOut("Direction", e.OldValue.ToString(), e.NewValue.ToString()); }; #endregion #region testing fnc.SetDate(new DateTime(2000,1,1)); fnc.SetDirection(e_Direction.Left); dpn.SetDependDot(e_Dot.Finish); Console.WriteLine("Unsuscribe..."); fnc.SetDate(new DateTime(2001,10,12)); #endregion #region default Console.WriteLine("\nPress Enter to exit..."); Console.ReadLine(); #endregion }
IEnumerator UpdatePluginInfo() { if (!Main.Ins.CombatData.PluginUpdated) { UnityWebRequest vFile = new UnityWebRequest(); vFile.url = string.Format(Main.strFile, Main.strHost, Main.port, Main.strProjectUrl, Main.strPlugins); vFile.timeout = 5; DownloadHandlerBuffer dH = new DownloadHandlerBuffer(); vFile.downloadHandler = dH; yield return(vFile.Send()); if (vFile.isError || vFile.responseCode != 200) { Debug.LogError(string.Format("update version file error:{0} or responseCode:{1}", vFile.error, vFile.responseCode)); Control("Warning").SetActive(true); vFile.Dispose(); Update = null; pluginCount = 0; //显示出存档中保存得DLC信息 Main.Ins.DlcMng.ClearModel(); for (int i = 0; i < Main.Ins.GameStateMgr.gameStatus.pluginModel.Count; i++) { Main.Ins.DlcMng.Models.Add(Main.Ins.GameStateMgr.gameStatus.pluginModel[i]); } //for (int i = 0; i < DlcMng.Instance.Models.Count; i++) //{ //InsertModel(DlcMng.Instance.Models[i]); //} pluginCount = Main.Ins.DlcMng.Models.Count; Main.Ins.DlcMng.ClearDlc(); for (int i = 0; i < Main.Ins.GameStateMgr.gameStatus.pluginChapter.Count; i++) { Main.Ins.DlcMng.Dlcs.Add(Main.Ins.GameStateMgr.gameStatus.pluginChapter[i]); } pluginCount += Main.Ins.DlcMng.Dlcs.Count; //for (int i = 0; i < DlcMng.Instance.Dlcs.Count; i++) //{ // InsertDlc(DlcMng.Instance.Dlcs[i]); //} pluginPage = 0; pageMax = pluginCount / pluginPerPage + ((pluginCount % pluginPerPage == 0) ? 0 : 1); Main.Ins.DlcMng.CollectAll(this.showInstallPlugin); Control("Pages").GetComponent <Text>().text = (pluginPage + 1) + "/" + pageMax; PluginPageUpdate = Main.Ins.StartCoroutine(PluginPageRefresh()); yield break; } Control("Warning").SetActive(false); pluginCount = 0; CleanModelList(); LitJson.JsonData js = LitJson.JsonMapper.ToObject(dH.text); for (int i = 0; i < js["Scene"].Count; i++) { //ServerInfo s = new ServerInfo(); //if (!int.TryParse(js["services"][i]["port"].ToString(), out s.ServerPort)) // continue; //if (!int.TryParse(js["services"][i]["type"].ToString(), out s.type)) // continue; //if (s.type == 0) // s.ServerHost = js["services"][i]["addr"].ToString(); //else // s.ServerIP = js["services"][i]["addr"].ToString(); //s.ServerName = js["services"][i]["name"].ToString(); //Global.Instance.Servers.Add(s); } for (int i = 0; i < js["Weapon"].Count; i++) { //ServerInfo s = new ServerInfo(); //if (!int.TryParse(js["services"][i]["port"].ToString(), out s.ServerPort)) // continue; //if (!int.TryParse(js["services"][i]["type"].ToString(), out s.type)) // continue; //if (s.type == 0) // s.ServerHost = js["services"][i]["addr"].ToString(); //else // s.ServerIP = js["services"][i]["addr"].ToString(); //s.ServerName = js["services"][i]["name"].ToString(); //Global.Instance.Servers.Add(s); } Main.Ins.DlcMng.ClearModel(); for (int i = 0; i < js["Model"].Count; i++) { int modelIndex = int.Parse(js["Model"][i]["Idx"].ToString()); Debug.LogError(modelIndex + js["Model"][i]["name"].ToString()); ModelItem Info = new ModelItem(); Info.ModelId = modelIndex; Info.Name = js["Model"][i]["name"].ToString(); Info.Path = js["Model"][i]["zip"].ToString(); if (js["Model"][i]["desc"] != null) { Info.Desc = js["Model"][i]["desc"].ToString(); } Info.useFemalePos = js["Model"][i]["gender"] != null; Main.Ins.DlcMng.AddModel(Info); } pluginCount += Main.Ins.DlcMng.Models.Count; //for (int i = 0; i < DlcMng.Instance.Models.Count; i++) //{ // InsertModel(DlcMng.Instance.Models[i]); //} Main.Ins.DlcMng.ClearDlc(); for (int i = 0; i < js["Dlc"].Count; i++) { Chapter c = new Chapter(); c.Installed = false; c.ChapterId = int.Parse(js["Dlc"][i]["Idx"].ToString()); c.Name = js["Dlc"][i]["name"].ToString(); c.Path = js["Dlc"][i]["zip"].ToString(); if (js["Dlc"][i]["desc"] != null) { c.Desc = js["Dlc"][i]["desc"].ToString(); } if (js["Dlc"][i]["reference"] != null) { Dependence dep = new Dependence(); for (int j = 0; j < js["Dlc"][i]["reference"].Count; j++) { if (js["Dlc"][i]["reference"][j]["Scene"] != null) { dep.scene = new List <int>(); for (int l = 0; l < js["Dlc"][i]["reference"][j]["Scene"].Count; l++) { dep.scene.Add(int.Parse(js["Dlc"][i]["reference"][j]["Scene"][l].ToString())); } } if (js["Dlc"][i]["reference"][j]["Model"] != null) { dep.model = new List <int>(); for (int l = 0; l < js["Dlc"][i]["reference"][j]["Model"].Count; l++) { dep.model.Add(int.Parse(js["Dlc"][i]["reference"][j]["Model"][l].ToString())); } } if (js["Dlc"][i]["reference"][j]["Weapon"] != null) { dep.weapon = new List <int>(); for (int l = 0; l < js["Dlc"][i]["reference"][j]["Weapon"].Count; l++) { dep.weapon.Add(int.Parse(js["Dlc"][i]["reference"][j]["Weapon"][l].ToString())); } } } c.Res = dep; } Main.Ins.DlcMng.AddDlc(c); } pluginCount += Main.Ins.DlcMng.Dlcs.Count; //for (int i = 0; i < DlcMng.Instance.Dlcs.Count; i++) //{ // InsertDlc(DlcMng.Instance.Dlcs[i]); //} pluginPage = 0; pageMax = pluginCount / pluginPerPage + ((pluginCount % pluginPerPage == 0) ? 0 : 1); Main.Ins.DlcMng.CollectAll(this.showInstallPlugin); PluginPageUpdate = Main.Ins.StartCoroutine(PluginPageRefresh()); Main.Ins.CombatData.PluginUpdated = true; PluginUpdate = null; } else { if (PluginPageUpdate != null) { yield break; } pluginCount = Main.Ins.DlcMng.Models.Count + Main.Ins.DlcMng.Dlcs.Count; pluginPage = 0; pageMax = pluginCount / pluginPerPage + ((pluginCount % pluginPerPage == 0) ? 0 : 1); PluginPageUpdate = Main.Ins.StartCoroutine(PluginPageRefresh()); } Control("Pages").GetComponent <Text>().text = (pluginPage + 1) + "/" + pageMax; }
/// <summary> /// Метод удаления объекта /// </summary> public void DeleteObject() { aUnsuscribeDependSlave(); aUnsuscribeSlave(); aUnsuscribeMaster(); _dependSlave = null; _slave = null; _master = null; _identity = null; aUnsuscribeDependSlave = aUnsuscribeMaster = aUnsuscribeSlave = null; event_ObjectDeleted?.Invoke(this, new ea_IdObject(this)); }
/// <summary> /// Метод инициализации зависимости для подчиненного члена связи (запускается четвертым) /// </summary> protected void init_slaveDependence() { //Запускать четвертым из инитов _dependSlave = new Dependence( _master.getObjectDependDotInfo().GetDate(), _slave.direction, dotDependSlave); _dependSlave.setSender(this); _slave.event_dependDateChanged += _dependSlave.handler_DateChange; _slave.event_dependDotChanged += _dependSlave.handler_DependDotChange; aUnsuscribeDependSlave = () => { _slave.event_dependDateChanged -= _dependSlave.handler_DateChange; _slave.event_dependDotChanged -= _dependSlave.handler_DependDotChange; aUnsuscribeDependSlave = () => { }; }; }
protected void init_dependence() { dependSlave = new Dependence(slave.dependDate, slave.direction, slave.dependDot); dependSlave.setSender(this); slave.event_dependDateChanged += (o, v) => dependSlave.date = v.NewValue; event_LimitChanged += (o, v) => dependSlave.SetDependDot(Hlp.GetDepenDot(v.NewValue, e_DependType.Slave)); }
/// <summary> /// Инициализирует класс зависимости <seealso cref="Dependence"/> /// </summary> /// <param name="dependDate">Дата зависимости</param> /// <param name="limitType">Тип зависимости</param> /// <exception cref="objectAlreadyExistException">Выбрасывает исключение если класс <seealso cref="Dependence"/> уже был инициализирован</exception> public void init_Dependence(ILink parent, DateTime dependDate, e_TskLim limitType) { if(depend != null) throw new objectAlreadyExistException(); date = dependDate; depend = new Dependence(date, cDirection, Hlp.GetDepenDot(limitType, dependType)); depend.setSender(parent); }
public void setDependence(Dependence depend) { dcDepend = depend; }
protected void init_Dependence() { _depend = new Dependence(project.GetDot(e_Dot.Start).GetDate(), e_Direction.Right, e_Dot.Start); }