Пример #1
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="moduleManager"></param>
 public JSOnTick(IModuleManager moduleManager)
 {
     ModuleManager = moduleManager;
     Logger        = ModuleManager.GetLogger();
     TickInterval  = moduleManager.GetConfiguration()
                     .GetSection("Modules")
                     .GetSection("Script")
                     .GetSection("Managers")
                     .GetSection("Javascript")
                     .GetValue <int>("TickInterval");
     Definition = new JavascriptFunctionDefinition()
     {
         Global      = true,
         Prototype   = "onTick [event]",
         Description = "Opportunity to execute code at regular intervals",
         Example     = @"var onTick = function() {\n};\n"
     };
     ModuleManager.ModuleManagerReadyEvent += () =>
     {
         ItemManager = ModuleManager.GetManager <IItemManager>();
         JavascriptItemDataManager = ModuleManager.GetManager <IJavascriptItemDataManager>();
         JavascriptItemDataRepo    = ModuleManager.GetRepository <IJavascriptItemDataRepo>();
         JavascriptItemDataManager.AddFunctionDefinition(Definition);
         ModuleManager.Ticks += OnTick;
     };
 }
Пример #2
0
 /// <summary>
 /// Execute onTick javascript function on all items that have it
 /// </summary>
 public void OnTick()
 {
     if (TickCount++ >= TickInterval)
     {
         Logger.LogInformation("Running item scripts");
         var javascriptDatas = JavascriptItemDataRepo.Read();
         javascriptDatas.ForEach(data =>
         {
             if (data.ScriptFunctions.Contains(":onTick:", StringComparison.InvariantCultureIgnoreCase))
             {
                 var item = ItemManager.Read(data.DataItemId);
                 if (item == null)
                 {
                     throw new BeforeOurTimeException($"No item ({data.DataItemId}) found for javascript data ({data.Id})");
                 }
                 JavascriptItemDataManager.ExecuteFunction(item, "onTick");
             }
         });
         TickCount = 0;
     }
 }