コード例 #1
0
        /// <summary>
        ///     get machine list from service
        /// </summary>
        /// <returns></returns>
        public string GetRedundancyStatus()
        {
            try
            {
                var proxy = (AdminProxy)_adminHost.GetProxy();

                if (proxy == null)
                {
                    return(string.Empty);
                }
                switch (proxy.GetRedundancyMode())
                {
                case 0:
                    return("未知");

                case 1:
                    return("主机");

                case 2:
                    return("从机");

                default:
                    return("错误");
                }
            }
            catch (Exception ex)
            {
                Log.Error("获取冗余状态失败:" + ex.Message);
                return(null);
            }
        }
コード例 #2
0
        /// <summary>
        ///     get all process name list from services
        /// </summary>
        /// <returns></returns>
        public List <string> GetProcessList()
        {
            try
            {
                var proxy = (ProcessProxy)_processHost.GetProxy();

                return(proxy?.ListProcessNames());
            }
            catch (Exception ex)
            {
                Log.Error("获取GetProcessList失败:" + ex.Message);
                return(null);
            }
        }
コード例 #3
0
        /// <summary>
        ///     get resource list from service
        /// </summary>
        /// <returns></returns>
        public List <string> GetResourceList()
        {
            try
            {
                var proxy = (ResourceProxy)_resourceHost.GetProxy();

                return(proxy?.GetAllResources());
            }
            catch (Exception ex)
            {
                Log.Error("获取资源列表失败:" + ex.Message);
                return(null);
            }
        }
コード例 #4
0
        /// <summary>
        ///     get machine list from service
        /// </summary>
        /// <returns></returns>
        public List <string> GetMachineList()
        {
            try
            {
                var proxy = (MachineProxy)_machineHost.GetProxy();

                return(proxy?.ListMachineNames());
            }
            catch (Exception ex)
            {
                Log.Error("获取MachineList失败:" + ex.Message);
                return(null);
            }
        }
コード例 #5
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++;
                    }
                }
            }
        }