public Guid Upsert(PartnerProxy proxy) { try { var repo = this.RepoFactory.Get <PartnersRepository>(); Partner partner; if (proxy.Id.HasValue) { partner = repo.GetById(proxy.Id); } else { partner = new Partner(); partner.Id = Guid.NewGuid(); repo.Add(partner); } partner.Name = proxy.Name; repo.SaveChanges(); return(partner.Id); } catch (Exception) { throw new UserException("Грешка при записването на партньора"); } }
public JsonResult Upsert(PartnerProxy proxy) { var response = new ResponseModel(); try { response.Data = Service.Upsert(proxy); } catch (Exception ex) { response.SetException(ex); } return(Json(response, JsonRequestBehavior.AllowGet)); }
// 主站调用 Dongmin 20191005 public void OnDataSyncToPartner(object sender) { //夏 2019年8月22日 17:46:53 判断host是否为null if (_host == null) { return; } // David 20191005 if (!PartnerAlive) { return; } PartnerProxy _proxy = (PartnerProxy)_host.GetProxy(); if (_proxy != null) { //_proxy.ExchangeData("testresource","testdata"); //测试 foreach (IResource resource in ResourceManager.GetAllResources()) { if (resource is IRedundancy) { IRedundancy res = (IRedundancy)resource; if (res.NeedDataSync) { string dataToSend = res.BuildSyncData(); //LOG.Debug(string.Format("RedundancyServer:向从站同步数据 resource:{0},data:{1}", resource.ResourceName, dataToSend)); _proxy.ExchangeData(resource.ResourceName, dataToSend); } } } } }
//private Thread _slaveCheck = null; //private bool IsPartnerModeChange() //{ // if (_lastPartnerMode != PartnerMode) // { // LOG.Debug(string.Format("Redundancy:冗余伙伴的模式从{0}变化成{1}", _lastPartnerMode.ToString(),PartnerMode.ToString())); // _lastPartnerMode = PartnerMode; // return true; // } // else // return false; //} private void RedundancyStatusCheck(object sender) { // 获得对方的模式 if (PartnerAlive) { //LOG.Debug("Redundancy:检测对方正在运行"); PartnerProxy _proxy = (PartnerProxy)_host.GetProxy(); if (_proxy != null) { var result = _proxy.GetPartnerMode(); PartnerMode = (RedundancyMode)(Enum.ToObject(typeof(RedundancyMode), result)); _partnerRunTime = _proxy.GetPartnerRunTime(); //LOG.Debug(string.Format("RedundancyClient:冗余伙伴的模式为:{0}", PartnerMode.ToString())); } //模式比较 if (Mode == RedundancyMode.Master) { if (PartnerMode == RedundancyMode.Master) { if (!WeAreFirstRun()) {//对方先运行 Log.Debug("Redundancy主从切换原因:双方Master,对方先启动"); ChangeMode(RedundancyMode.Slave); } } } else if (Mode == RedundancyMode.Slave) { if (PartnerMode == RedundancyMode.Slave) { if (WeAreFirstRun()) {//我方先运行 Log.Debug("Redundancy主从切换原因:对方Slave,我方Slave,我方先启动"); ChangeMode(RedundancyMode.Master); } } } else if (Mode == RedundancyMode.Unknown) { if (PartnerMode == RedundancyMode.Master) { Log.Debug("Redundancy主从切换原因:对方Master,我方是Unknown"); ChangeMode(RedundancyMode.Slave); } else if (PartnerMode == RedundancyMode.Slave) { Log.Debug("Redundancy主从切换原因对方Slave,我方是Unknown"); ChangeMode(RedundancyMode.Master); } else if (PartnerMode == RedundancyMode.Unknown) { if (WeAreFirstRun()) {//我方先运行 Log.Debug("Redundancy主从切换原因对方Unknown,我方是Unknown,我方先启动"); ChangeMode(RedundancyMode.Master); } } } PartnerUnliveCounts = 0; } else { // 连接断开 PartnerMode = RedundancyMode.Unknown; if (Mode != RedundancyMode.Master) { if (PartnerUnliveCounts >= ConfirmPartnerUnliveLimitation) { PartnerUnliveCounts = 0; Log.Debug("Redundancy主从切换原因:对方不在线,已经过了验证期"); ChangeMode(RedundancyMode.Master); } else { Log.Debug(string.Format("Redundancy:对方不在线,验证{0}次", PartnerUnliveCounts)); PartnerUnliveCounts++; } } } }