mirror of https://github.com/docker/docs.git
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package backends
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/docker/libswarm/beam"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// New returns a new engine, with all backends
|
|
// registered but not activated.
|
|
// To activate a backend, call a job on the resulting
|
|
// engine, named after the desired backend.
|
|
//
|
|
// Example: `New().Job("debug").Run()`
|
|
func New() *beam.Object {
|
|
backends := beam.NewTree()
|
|
backends.Bind("simulator", Simulator())
|
|
backends.Bind("debug", Debug())
|
|
backends.Bind("fakeclient", FakeClient())
|
|
return beam.Obj(backends)
|
|
}
|
|
|
|
func Debug() beam.Sender {
|
|
backend := beam.NewServer()
|
|
backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error {
|
|
instance := beam.NewServer()
|
|
instance.Catchall(beam.Handler(func(msg *beam.Message) error {
|
|
fmt.Printf("[DEBUG] %s %s\n", msg.Verb, strings.Join(msg.Args, " "))
|
|
ctx.Ret.Send(msg)
|
|
return nil
|
|
}))
|
|
_, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: instance})
|
|
return err
|
|
}))
|
|
return backend
|
|
}
|
|
|
|
func FakeClient() beam.Sender {
|
|
backend := beam.NewServer()
|
|
backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error {
|
|
// Instantiate a new fakeclient instance
|
|
instance := beam.Task(func(in beam.Receiver, out beam.Sender) {
|
|
fmt.Printf("fake client!\n")
|
|
defer fmt.Printf("end of fake client!\n")
|
|
o := beam.Obj(out)
|
|
o.Log("fake client starting")
|
|
defer o.Log("fake client terminating")
|
|
for {
|
|
time.Sleep(1 * time.Second)
|
|
o.Log("fake client heartbeat!")
|
|
}
|
|
})
|
|
_, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: instance})
|
|
return err
|
|
}))
|
|
return backend
|
|
}
|