Esempio n. 1
0
        public void AddDynamicCommand(DynamicCommand dynamicCommand)
        {
            Logger.Info("Add new dynamic command with command id {0:D}", dynamicCommand.CommandId);

            int pluginId = -1;

            if (dynamicCommand.PluginHash != null &&
                !_databaseManager.CheckIsStaticCommandPluginAvailable(dynamicCommand.PluginHash, out pluginId))
            {
                Logger.Error(
                    $"The received dynamic command can't be executed because the plugin ({StringExtensions.BytesToHex(dynamicCommand.PluginHash)}) is not available");
                return;
            }

            var registeredCommand = new RegisteredDynamicCommand
            {
                Id                = _databaseManager.AddDynamicCommand(dynamicCommand, pluginId),
                CommandId         = dynamicCommand.CommandId,
                Conditions        = dynamicCommand.Conditions,
                ExecutionEvent    = dynamicCommand.ExecutionEvent,
                Target            = dynamicCommand.Target,
                TransmissionEvent = dynamicCommand.TransmissionEvent,
                PluginHash        = dynamicCommand.PluginHash,
                PluginResourceId  = pluginId,
                Timestamp         = DateTime.UtcNow,
                StopEvent         = dynamicCommand.StopEvent
            };

            lock (_dynamicCommandsLock)
                DynamicCommands.Add(registeredCommand);
            DynamicCommandAdded?.Invoke(this, registeredCommand);

            if (dynamicCommand.TransmissionEvent.GetType() == typeof(ImmediatelyTransmissionEvent))
            {
                ExecuteDynamicCommand(registeredCommand, true, dynamicCommand.CommandParameter);
                return;
            }

            if (dynamicCommand.TransmissionEvent.GetType() == typeof(EveryClientOnceTransmissionEvent))
            {
                ExecuteDynamicCommand(registeredCommand, false, dynamicCommand.CommandParameter);
                return;
            }

            if (registeredCommand.TransmissionEvent.GetType() == typeof(DateTimeTransmissionEvent) ||
                registeredCommand.TransmissionEvent.GetType() == typeof(RepeatingTransmissionEvent))
            {
                _dynamicCommandScheduler.AddDynamicCommand(registeredCommand);
            }
        }