Exemple #1
0
 public ListUser(IEnumerable <OneDat> dat)
 {
     if (dat != null)
     {
         foreach (var o in dat)
         {
             //有効なデータだけを対象にする
             if (o.Enable)
             {
                 try {
                     var ftpAcl   = (FtpAcl)Convert.ToInt32(o.StrList[0]);
                     var homeDir  = o.StrList[1];
                     var userName = o.StrList[2];
                     try {
                         var password = Crypt.Decrypt(o.StrList[3]);
                         Ar.Add(new OneUser(ftpAcl, userName, password, homeDir));
                     } catch (Exception e) {
                         Util.RuntimeException(e.Message);
                     }
                 } catch (Exception e) {
                     Util.RuntimeException(e.Message);
                 }
             }
         }
     }
 }
Exemple #2
0
        public void MakeStep(out int iter, out double residual)
        {
            if (!init)
            {
                throw new InvalidOperationException("Решатель не инициализирован, выполнение операции невозможно");
            }

            currentIter++;
            iter = currentIter;

            if (Factorizer != null)
            {
                coefficient = p.DotProduct(r) / dotproduct_pp;
                if (Double.IsInfinity(coefficient) || Double.IsNaN(coefficient))
                {
                    residual = -1;
                    return;
                }

                x  = x.Add(z, coefficient);
                r  = r.Add(p, -coefficient);
                Ar = Factorizer.LSolve(A.Multiply(Factorizer.USolve(r)));

                coefficient = -p.DotProduct(Ar) / dotproduct_pp;
                if (Double.IsInfinity(coefficient) || Double.IsNaN(coefficient))
                {
                    residual = -1;
                    return;
                }

                z = Factorizer.USolve(r).Add(z, coefficient);
            }
            else
            {
                coefficient = p.DotProduct(r) / dotproduct_pp;
                if (Double.IsInfinity(coefficient) || Double.IsNaN(coefficient))
                {
                    residual = -1;
                    return;
                }

                x  = x.Add(z, coefficient);
                r  = r.Add(p, -coefficient);
                Ar = A.Multiply(r);

                coefficient = -p.DotProduct(Ar) / dotproduct_pp;
                if (Double.IsInfinity(coefficient) || Double.IsNaN(coefficient))
                {
                    residual = -1;
                    return;
                }

                z = r.Add(z, coefficient);
            }

            p             = Ar.Add(p, coefficient);
            dotproduct_pp = p.DotProduct(p);

            residual = r.Norm / norm_b;
        }
Exemple #3
0
        //サーバ(OneServer)の生成
        private void AddServer(Conf conf, OnePlugin onePlugin)
        {
            var protocol = (ProtocolKind)conf.Get("protocolKind");
            //ProtocolKind protocol = ProtocolKind.ValueOf((int) conf.Get("protocolKind"));

            BindAddr bindAddr = (BindAddr)conf.Get("bindAddress2");

            if (bindAddr.BindStyle != BindStyle.V4Only)
            {
                var oneBind = new OneBind(bindAddr.IpV6, protocol);
                var o       = onePlugin.CreateServer(kernel, conf, oneBind);
                if (o != null)
                {
                    Ar.Add((OneServer)o);
                }
            }
            if (bindAddr.BindStyle != BindStyle.V6Only)
            {
                var oneBind = new OneBind(bindAddr.IpV4, protocol);
                var o       = onePlugin.CreateServer(kernel, conf, oneBind);
                if (o != null)
                {
                    Ar.Add((OneServer)o);
                }
            }
        }
Exemple #4
0
 //null追加を回避するために、Ar.Add()は、このファンクションを使用する
 private bool Add(OneOption o)
 {
     if (o == null)
     {
         return(false);
     }
     Ar.Add(o);
     return(true);
 }
Exemple #5
0
 //null追加を回避するために、ar.Add()は、このファンクションを使用する
 bool Add(OneTool o)
 {
     if (o == null)
     {
         return(false);
     }
     Ar.Add(o);
     return(true);
 }
Exemple #6
0
        //文字列による初期化
        public bool FromReg(String str)
        {
            Ar.Clear();
            if (string.IsNullOrEmpty(str))
            {
                return(false);
            }

            //Ver5.7.x以前のiniファイルをVer5.8用に修正する
            var tmp = Util.ConvValStr(str);

            str = tmp;

            // 各行処理
            String[] lines = str.Split('\b');
            if (lines.Length <= 0)
            {
                return(false); //"lines.length <= 0"
            }

            foreach (var l in lines)
            {
                var s = l;
                //OneDatの生成
                OneDat oneDat;
                try{
                    oneDat = new OneDat(true, new String[_colMax], _isSecretList);
                }
                catch (ValidObjException) {
                    return(false);
                }

                if (s.Split('\t').Length != _isSecretList.Length + 1)
                {
                    // +1はenableカラムの分
                    //カラム数の不一致
                    return(false);
                }

                //fromRegによる初期化
                if (oneDat.FromReg(s))
                {
                    Ar.Add(oneDat);
                    continue; // 処理成功
                }
                //処理失敗
                Ar.Clear();
                return(false);
            }
            return(true);
        }
Exemple #7
0
            public ListFetchJob(Kernel kernel, MailSave mailSave, String domainName, Logger logger, IEnumerable <OneDat> fetchList, int timeout, int sizeLimit)
            {
                if (fetchList != null)
                {
                    foreach (var o in fetchList)
                    {
                        if (o.Enable)
                        {
                            var interval  = Convert.ToInt32(o.StrList[0]); //受信間隔
                            var host      = o.StrList[1];                  //サーバ
                            var port      = Convert.ToInt32(o.StrList[2]); //ポート
                            var user      = o.StrList[3];                  //ユーザ
                            var pass      = Crypt.Decrypt(o.StrList[4]);   //パスワード
                            var localUser = o.StrList[5];                  //ローカルユーザ


                            //Ver5.2.7 旧バージョン(5.2以前)との互換のため
                            int synchronize;
                            try {
                                synchronize = Convert.ToInt32(o.StrList[6]); //同期
                            } catch {
                                var s = o.StrList[6];
                                if (s == "サーバに残す" || s == "An email of a server does not eliminate it")
                                {
                                    synchronize = 0;
                                }
                                else if (s == "メールボックスと同期する" || s == "Synchronize it with a mailbox")
                                {
                                    synchronize = 1;
                                }
                                else if (s == "サーバから削除する" || s == "An email of a server eliminates it")
                                {
                                    synchronize = 2;
                                }
                                else
                                {
                                    continue; //コンバート失敗したので設定データは無効
                                }
                            }
                            var keepTime = Convert.ToInt32(o.StrList[7]); //サーバに残す時間
                            var oneFetch = new OneFetch(interval, host, port, user, pass, localUser, synchronize, keepTime);
                            if (oneFetch.Ip == null)
                            {
                                logger.Set(LogKind.Error, null, 0, string.Format("host={0}", host));
                            }
                            Ar.Add(new OneFetchJob(kernel, mailSave, domainName, oneFetch, timeout, sizeLimit));
                        }
                    }
                }
            }
Exemple #8
0
        public void Add(OneVal oneVal)
        {
            // 追加オブジェクトの一覧
            var list = oneVal.GetList(null);

            foreach (var o in list)
            {
                if (null != Search(o.Name))
                {
                    Msg.Show(MsgKind.Error, string.Format("ListVal.add({0}) 名前が重複しているため追加できませんでした", o.Name));
                }
            }
            // 重複が無いので追加する
            Ar.Add(oneVal);

            oneVal.OnChange += oneVal_OnChange;
        }
Exemple #9
0
        //dir 検索対象となるpluginsフォルダ
        public ListPlugin(String dir)
        {
            //フォルダが存在しない場合、初期化終了
            if (!Directory.Exists(dir))
            {
                return;
            }

            //DLLを検索し、各オプションを生成する
            //Ver5.2.4 関係ない*Server.dll以外は、対象外とする
            var list = Directory.GetFiles(dir, "*Server.dll").ToList();

            list.Sort();
            foreach (var path in list)
            {
                Ar.Add(new OnePlugin(path));
            }
        }
Exemple #10
0
        //文字列によるOneDatの追加
        //内部で、OneDatの型がチェックされる
        public bool Add(bool enable, string str)
        {
            if (str == null)
            {
                return(false); //引数にnullが渡されました
            }
            var list = str.Split('\t');

            if (list.Length != _colMax)
            {
                return(false); //カラム数が一致しません
            }
            OneDat oneDat;

            try{
                oneDat = new OneDat(enable, list, _isSecretList);
            }
            catch (ValidObjException) {
                return(false); // 初期化文字列が不正
            }
            Ar.Add(oneDat);
            return(true);
        }
Exemple #11
0
        //ツールリストの初期化
        public void Initialize(Kernel kernel)
        {
            Ar.Clear();

            //「ステータス表示」の追加
            var nameTag = Path.GetFileNameWithoutExtension(Application.ExecutablePath);

            //Add((OneTool)Util.CreateInstance(kernel,Application.ExecutablePath, "Tool", new object[] { kernel, nameTag }));
            Add(new Tool(kernel, nameTag));


            //OptionListを検索して初期化する
            foreach (var o in kernel.ListOption)
            {
                if (o.UseServer)
                {
                    var oneTool = (OneTool)Util.CreateInstance(kernel, o.Path, "Tool", new object[] { kernel, o.NameTag });
                    if (oneTool != null)
                    {
                        Ar.Add(oneTool);
                    }
                }
            }
        }
Exemple #12
0
 public OneMenu Add(OneMenu o)
 {
     Ar.Add(o);
     return(o);
 }
Exemple #13
0
 public void Add(string fromFolder, string toFolder)
 {
     Ar.Add(new OneMount(fromFolder, toFolder));
 }
Exemple #14
0
 public void Add(OneClass o)
 {
     Ar.Add(o);
 }
Exemple #15
0
        /// <summary>
        /// Решение СЛАУ методом локально-оптимальной схемы
        /// </summary>
        /// <param name="preconditioner">Матрица СЛАУ</param>
        /// <param name="b">Ветор правой части</param>
        /// <param name="Initial">Ветор начального приближения</param>
        /// <param name="Precision">Точность</param>
        /// <param name="Maxiter">Максимальное число итераций</param>
        /// <returns>Вектор x - решение СЛАУ Ax=b с заданной точностью</returns>
        public IVector Solve(IPreconditioner preconditioner, IMatrix A, IVector b, IVector Initial, double Precision, int Maxiter, ILogger Logger)
        {
            Logger.WriteNameSolution("LOS", preconditioner.getName());
            string start = DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss:fff");

            Logger.setMaxIter(Maxiter);
            IVector x = Initial.Clone() as IVector;

            double alpha = 0.0, beta = 0.0;

            IVector r = b.Add(A.Mult(Initial), 1, -1);    //r_0 = f - Ax_0

            r = preconditioner.SolveL(r);                 // r_0 = L^-1 * (f - Ax_0)

            IVector Ar, z = preconditioner.SolveU(r);     // z_0 = U^-1 * r_0
            IVector p = preconditioner.SolveL(A.Mult(z)); // p_0 = L^-1 * Az_0

            double p_r = 0.0, p_p = 0.0;

            double scalRR = r.ScalarMult(r);
            double normR  = Math.Sqrt(scalRR) / b.Norm;

            for (int iter = 0; iter < Maxiter && normR > Precision; iter++)
            //for (int iter = 0; iter < Maxiter && ; iter++)
            {
                p_r   = p.ScalarMult(r); //(p_k-1,r_k-1)
                p_p   = p.ScalarMult(p); //(p_k-1,p_k-1)
                alpha = p_r / p_p;

                x.Add(z, 1, alpha, true);                                     // x_k = x_k-1 + alfa_k*z_k-1

                r.Add(p, 1, -alpha, true);                                    // r_k = r_k-1 - alfa_k*p_k-1

                Ar = preconditioner.SolveL(A.Mult(preconditioner.SolveU(r))); //Ar_k = L^-1 * A * U^-1 * r_k
                //Ar = A.SolveU(r);
                //Ar = AA.Mult(Ar);
                //Ar = A.SolveL(Ar);

                beta = -(p.ScalarMult(Ar) / p_p);

                z = preconditioner.SolveU(r).Add(z, 1, beta); //z_k = U^-1 * r_k + beta_k*z_k-1
                p = Ar.Add(p, 1, beta);                       // p_k = L^-1 * A * U^-1 * r_k + beta_k*p_k-1

                if (scalRR == 0)
                {
                    Logger.WriteSolution(x, Maxiter, b.Add(A.Mult(x), -1, 1).Norm);
                    Logger.WriteTime(start, DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss:fff"));
                    throw new DivideByZeroException("Division by 0");
                }
                scalRR = r.ScalarMult(r);

                normR = Math.Sqrt(scalRR) / b.Norm;
                Factory.Residual.Add(normR);
                Logger.WriteIteration(iter, normR);

                if (double.IsNaN(normR) || double.IsInfinity(normR))
                {
                    Logger.WriteSolution(x, Maxiter, b.Add(A.Mult(x), -1, 1).Norm);
                    Logger.WriteTime(start, DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss:fff"));
                    throw new CantSolveException();
                }
            }
            Logger.WriteSolution(x, Maxiter, b.Add(A.Mult(x), -1, 1).Norm);
            Logger.WriteTime(start, DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss:fff"));
            return(x);
        }