Ejemplo n.º 1
0
        public TrueOrFalse Import(HttpContext context)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(new TrueOrFalse(false));
            }
            #endregion

            bool res = false;
            if (context.Request.Form.Files.Count == 1)
            {
                using (MemoryStream mem = new MemoryStream())
                {
                    // Получаем файл
                    context.Request.Form.Files[0].CopyTo(mem);
                    var tgr = JsonConvert.DeserializeObject <TriggerConf>(Encoding.UTF8.GetString(mem.ToArray()));

                    // Меняем Id
                    tgr.Id = int.Parse(Generate.Passwd(6, IsNumberCode: true));

                    // Сохраняем файл
                    System.IO.File.WriteAllText($"{Folders.Triggers}/{tgr.Id}.conf", JsonConvert.SerializeObject(tgr, Formatting.Indented));

                    // Обновляем базу
                    RegisteredTriggers.UpdateDB();

                    // Успех
                    res = true;
                }
            }

            // Отдаем результат
            return(new TrueOrFalse(res));
        }
Ejemplo n.º 2
0
        public JsonResult Save(int Id, string nodes, bool IsAPI = false)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            try
            {
                // Поиск триггера
                var FindTrigger = RegisteredTriggers.List().Where(i => i.Id == Id).FirstOrDefault();
                if (FindTrigger == null)
                {
                    return(Json(new Text("Триггер не найден")));
                }

                // Модель ceron.pw
                var blueprintModel = JsonConvert.DeserializeObject <IDictionary <string, BlueprintModel> >(nodes);

                // Подписки
                Dictionary <string, Subscription> Subscriptions = new Dictionary <string, Subscription>();

                // Условия триггера
                Dictionary <string, Trigger> TriggerNodes = new Dictionary <string, Trigger>();

                #region Конверт "BlueprintModel" в "Subscriptions/TriggerNodes"
                foreach (var blueprint in blueprintModel)
                {
                    #region Локальный метод - "StringToList"
                    List <string> StringToList(string data)
                    {
                        List <string> mass = new List <string>();

                        if (string.IsNullOrWhiteSpace(data))
                        {
                            return(mass);
                        }

                        foreach (string line in data.Replace("\r", "").Split('\n'))
                        {
                            if (string.IsNullOrWhiteSpace(data))
                            {
                                continue;
                            }

                            mass.Add(line);
                        }

                        return(mass);
                    }
                    #endregion

                    switch (blueprint.Value.worker)
                    {
                    case "event":
                    {
                        var val = blueprint.Value;
                        Subscriptions.Add(blueprint.Key, new Subscription()
                            {
                                position   = val.position,
                                TrigerName = val.varsData.input.name,
                                TrigerPath = val.varsData.input.path,
                            });
                        break;
                    }

                    case "action":
                    {
                        var val = blueprint.Value;
                        TriggerNodes.Add(blueprint.Key, new Trigger()
                            {
                                position   = val.position,
                                Name       = val.varsData.output.output,
                                code       = val.varsData.input.code,
                                Namespaces = StringToList(val.varsData.input.namespaces),
                                References = StringToList(val.varsData.input.references),
                            });
                        break;
                    }
                    }
                }
                #endregion

                #region Ставим ссылки NextSteps
                foreach (var blueprint in blueprintModel)
                {
                    if (blueprint.Value.worker == "action")
                    {
                        foreach (var parent in blueprint.Value.parents)
                        {
                            if (Subscriptions.TryGetValue(parent.uid, out Subscription sub))
                            {
                                sub.StepIds += string.IsNullOrWhiteSpace(sub.StepIds) ? blueprint.Key : "," + blueprint.Key;
                            }

                            if (TriggerNodes.TryGetValue(parent.uid, out Trigger tgr))
                            {
                                tgr.NextSteps += string.IsNullOrWhiteSpace(tgr.NextSteps) ? blueprint.Key : "," + blueprint.Key;
                            }
                        }
                    }
                }
                #endregion

                // Обновляем параметры
                FindTrigger.Trigger       = TriggerNodes;
                FindTrigger.Subscriptions = Subscriptions;

                // Сохраняем файл
                System.IO.File.WriteAllText(FindTrigger.TriggerFile, JsonConvert.SerializeObject(FindTrigger, Formatting.Indented));

                // Обновляем базу
                RegisteredTriggers.UpdateDB();

                // Отдаем сообщение
                return(Json(new Text("Настройки успешно сохранены")));
            }
            catch (Exception ex)
            {
                return(Json(new Text(ex.Message)));
            }
        }
Ejemplo n.º 3
0
        public JsonResult Save(TriggerConf tgr, bool IsAPI = false)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Проверка данных
            if (string.IsNullOrWhiteSpace(tgr.TriggerName))
            {
                return(Json(new Text("Описание триггера не может быть пустым")));
            }

            // Новый триггер
            if (tgr.Id == 0)
            {
                // Модель
                TriggerConf triggerConf = new TriggerConf()
                {
                    TriggerName = tgr.TriggerName,
                    Author      = tgr.Author,
                    IsActive    = tgr.IsActive
                };

                // Сохраняем файл
                System.IO.File.WriteAllText($"{Folders.Triggers}/{triggerConf.Id}.conf", JsonConvert.SerializeObject(triggerConf, Formatting.Indented));

                // Обновляем базу
                RegisteredTriggers.UpdateDB();

                // Отдаем ответ
                return(Json(new RewriteToId(triggerConf.Id)));
            }

            // Существующий
            else
            {
                // Поиск триггера
                var FindTrigger = RegisteredTriggers.List().Where(i => i.Id == tgr.Id).FirstOrDefault();
                if (FindTrigger == null)
                {
                    return(Json(new Text("Триггер не найден")));
                }

                // Обновляем параметры
                FindTrigger.TriggerName = tgr.TriggerName;
                FindTrigger.Author      = tgr.Author;
                FindTrigger.IsActive    = tgr.IsActive;

                // Сохраняем файл
                System.IO.File.WriteAllText(FindTrigger.TriggerFile, JsonConvert.SerializeObject(FindTrigger, Formatting.Indented));

                // Обновляем базу
                RegisteredTriggers.UpdateDB();

                // Отдаем сообщение
                return(Json(new Text("Настройки успешно сохранены")));
            }
        }