Dairy's service framework is tighly bound to the OpMode lifecycle and all services depend on Loop() occuring many
times a second. By default, Roadrunner 1.0 runs code in a blocking loop, not letting the actual Loop() code of your OpMode run.
For users who are not using Mercurial as a commandbase, you will only need something to correct the blocking actions runner.
This can be done with this sample Dairy service.
Below is a sample service called SilkRoad. It is a dairy service where you set your running actions with SillRoad.runAsync(),
similar to Actions.runBlocking(), but in the Start() method of OpMode. Then, SilkRoad automatically
updates until all supplied actions are done, with no code besides setting run async actions required.
If you use Mercurial, you can also use the following wrapper to run your commands as if they were actions:
You cam use this in SilkRoad.runAsync() like you would any other action,
but pass in a Mercurial command!
It even works on Mercurial parallel or sequential commands by wrapping them:
new MercurialAction(new Parallel(Command...))
If you want to see a (questionable quality) example of using these, you can check out team 27971 Null Pointer Exception's Teamcode.