Ejemplo n.º 1
0
        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("Грешка при записването на партньора");
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        // 主站调用 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);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        //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++;
                    }
                }
            }
        }