Simple startable plugin example

The following sample code implements a complete Singleton startable plugin. The example does not do anything useful in its start method, but demonstrates the basic structure of creating a block that you pass to the callback handler’s execute method.

package gw.api.startableplugin
uses gw.api.startable.IStartablePlugin
uses gw.api.startable.StartablePluginCallbackHandler
uses gw.api.startable.StartablePluginState
uses gw.api.server.Availability
uses gw.api.server.AvailabilityLevel

 @Availability(AvailabilityLevel.MULTIUSER)
class HelloWorldStartablePlugin implements IStartablePlugin {
  var _state = StartablePluginState.Stopped;
  var _callback : StartablePluginCallbackHandler;

  construct() {
  }

  override property get State() : StartablePluginState {
    return _state
  }

  override function start( cbh: StartablePluginCallbackHandler, isStarting: boolean ) {
    _callback = cbh
    _callback.execute( \ -> {
      // Do some work:
      // [...]
    } )
    _state = StartablePluginState.Started
    _callback.log( "*** From HelloWorldStartablePlugin: Hello world." )
  }

  override function stop( isShuttingDown: boolean ) {
    _callback.log( "*** From HelloWorldStartablePlugin: Goodbye." )
    _callback = null
    _state = StartablePluginState.Stopped
  }
}