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); } }