예제 #1
0
        public FRouter(string FileName, string ruleName,ref Params Param)
        {
            ConfigFile = FileName;
            RuleName = ruleName;
            Par = Param;

            Log = new Logging("Log", RuleName, LogType.Info);
        }
예제 #2
0
 public LineDecoder(string Line, Params param)
 {
     Par = param;
     this.Words = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); // Регистронезависимое сравнение
     LineStr = Line;
     this._inherit = false;
     DecodeLine();
     SetRuleName();
     SetInherit();
 }
예제 #3
0
        static void Main(string[] args)
        {
            // Номер сборки
            Assembly curAssembly = Assembly.GetExecutingAssembly();
            Version ver=curAssembly.GetName().Version;
            ver.ToString();
            Console.WriteLine("fnrouter v. "+ver.ToString());

            ReadArgs(args);

            /*
            //Trace.WriteLine("Environment.CommandLine=" + Environment.CommandLine);
            Console.WriteLine("Environment.CommandLine=" + Environment.CommandLine);
            string ProgDir = Path.GetDirectoryName(Environment.CommandLine); // По умолчанию в каталоге с программой
            Trace.WriteLine("ProgDir=" + ProgDir);
            //Console.WriteLine("ProgDir=" + ConfigFile);
            ConfigFile = Path.Combine(ProgDir, ConfigFile);
            */

            // каталог логов
            string RootFolder; // Каталог запуска программы
            RootFolder = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]);

            ConfigFile = Path.Combine(RootFolder, ConfigFile);

            if (String.IsNullOrEmpty(RuleName) && !debug) // Не задано правило
            {
                ShowHelp();
                return;
            }

            if (!File.Exists(ConfigFile))
            {
                Console.WriteLine("Не найден файл с правилами: " + ConfigFile);
                return;
            }

            using (Process currentProcess = Process.GetCurrentProcess())
            {
                guid = string.Format("[{0}][{1}]", currentProcess.ProcessName, RuleName);
            }

            if (_mutex == null)
                _mutex = new Mutex(true, guid, out isNew);

            if (!isNew)
            {
                Console.WriteLine("Копия программы с таким правилом уже запущена: " + RuleName);
                return;
            }

            //Console.WriteLine("Debug: Mutex guid:" + guid);

            if (!debug) Console.WriteLine("Запуск правила " + RuleName+" из файла "+ConfigFile);
            else Console.WriteLine("Проверка файла " + ConfigFile);

            Par = new Params(ConfigFile);
            Par.Debug = debug;
            //GSettings.Param = new MParam("srv", "", "", "25", "sdfsd@sfsdf");
            FRouter router = new FRouter(ConfigFile, RuleName,ref Par);
            router.DoRule();
        }
예제 #4
0
        public RuleLine(string Linestr,string ruleName,Logging log, ref Params param)
        {
            Par = param;
            LDecoder = new LineDecoder(Linestr,Par); // Декодируем строку
            Rule = new RuleRow();
            _isEmpty = false;
            Log = log;

            // Разбор строки
            if (LDecoder.NumKeys == 0) // Строка пуста
            {
                SetVoid();
                return;
            }

            string sValue;

            if (LDecoder.ContainsKey("Section")) // Это начало новой секции
            {
                Par.Section = LDecoder.GetValue("Section");
                SetVoid();
                return;
            }

            // Секции могут быть:
            // Mail, Vars и имена правил

            if (Par.Section.Equals("Mail", StringComparison.CurrentCultureIgnoreCase)
                || Par.Section.Equals("Vars", StringComparison.CurrentCultureIgnoreCase))
            {
                SetVoid();
                return;
            }

            Par.ReadLine(LDecoder);

            if (Par.Debug)
            {
                string val;
                if (!LDecoder.IsVarExpanded(out val))
                {
                    Log.LogMessage(LogType.Error, "Не найдена переменная в строке [" + Par.CurLineNum.ToString()+"] "+val);
                    return;
                }
                else
                    return;
            }

            //inherit=LDecoder.CoverWords(); // Получаем параметры предыдущей строки

            // Rule не задано явно, копируем из section
            //if (!LDecoder.ContainsKey("RULE") && !String.IsNullOrEmpty(Par.Section))
            //{
                //LDecoder.Words.Add("RULE", Par.Section);

            //}

            sValue = LDecoder.GetValue("RULE");
            //sValue = sValue.ToUpper();
            if (String.IsNullOrEmpty(sValue)) // Имя правила пусто
            {
                SetVoid();
                return;
            }
            Rule.RuleName = sValue;
            //Options.UpdateGlobal(LDecoder); // Обновляем глобальные настройки (Если это правило settings)

            if (!Rule.RuleName.Equals(ruleName, StringComparison.CurrentCultureIgnoreCase)) // Имя правила не совпадает
            {
                SetVoid();
                return;
            }

            sValue = LDecoder.GetValue("REN");
            sValue = sValue.ToUpper();
            Rule.Ren = sValue;

            sValue = LDecoder.GetValue("ACT");
            sValue = sValue.ToUpper();
            switch (sValue)
            {
                case "COPY":
                    Rule.Action = TAction.Copy;
                    break;
                case "MOVE":
                    Rule.Action = TAction.Move;
                    break;
                case "SEND":
                    Rule.Action = TAction.Send;
                    break;
                case "SENDMSG":
                    Rule.Action = TAction.SendMsg;
                    break;
                case "RUNWAIT":
                    Rule.Action = TAction.RunWait;
                    break;
                case "RUNNOWAIT":
                    Rule.Action = TAction.RunNoWait;
                    break;
                case "UNRAR":
                    Rule.Action = TAction.UnRar;
                    break;
                case "UNARJ":
                    Rule.Action = TAction.UnArj;
                    break;
                case "UNCAB":
                    Rule.Action = TAction.UnCab;
                    break;
                case "DELETE":
                    Rule.Action = TAction.Delete;
                    break;
                case "MOVENALOGDIR":
                    Rule.Action = TAction.MoveNalogDir;
                    break;
                case "MOVEFTSDIR":
                    Rule.Action = TAction.MoveFTSDir;
                    break;
                case "PBGEN":
                    Rule.Action = TAction.PbGen;
                    break;
                case "MERGENALOGFILE":
                    Rule.Action = TAction.MergeNalogFile;
                    break;
                case "NOTHING":
                    Rule.Action = TAction.Nothing;
                    break;
                case "NO": // Аналог Nothing
                    Rule.Action = TAction.Nothing;
                    break;
                default:
                    SetVoid();
                    return;
                    //break;
            }
            FillFiles(); // Читаем список файлов
        }