Official release is coming soon

Scheduler

The SDK provides a flexible scheduler to do actions in a specific interval. You write your job in C# and the user of the job can configure it in the extension config (plugin.conf).

The scheduler can be configured with the plugin.conf file:

scheduler {
   enabled = true
   jobs {
      // write here your job configurations
   }
}

Writing an job

We now writing a job that logs a message.

public class HelloJob : Job {
    private static readonly LoggerInstance Logger = Log.GetLogger<HelloJob>(); // Configure a logger specified for the HelloJob

    public override void Run() {
        Log.Info("Hello World");
    }

}

Now the job is implemented but it has to be registered in the scheduler with a name in your MossExtension class. Jobs have to be registered before your extension will be initialized.

[UnmanagedCallersOnly(EntryPoint = "moss_extension_register")]
public static ulong Register()
{
    TaskScheduler.Activator.Register<HelloWorldJob>("hello");

    Init<MyMossExtension>();

    return 0;
}

You can now configure the scheduler to run your job: In the plugin.conf set this properties:

scheduler {
    jobs {
       helloworld { # the name of the job instance
          class = hello
          enabled = true
          interval = 5s
       }
    }
}

now when your extension is started the scheduler will run your job every 5 seconds

Parameterize your job

the user can specifiy job specific options in the job configuration. In our sample we will introduce a message option:

scheduler {
    jobs {
       helloworld { # the name of the job instance
          class = hello
          enabled = true
          interval = 5s
          options {
             message = "I am a configured message"
          }
       }
    }
}

Now you can read those option with the Options-property of the job:

public class HelloJob : Job {
    private static readonly LoggerInstance Logger = Log.GetLogger<HelloJob>(); // Configure a logger specified for the HelloJob

    string message;
    public override void Init() {
       message = Options.message; // you can directly access your option as member
    }

    public override void Run() {
        Log.Info(message);
    }
}

You can see different examples of custom jobs in the Totletheyn plugin.

Last updated

Was this helpful?