- // Timestamps are added by `safcm`
- log.SetFlags(0)
-
- if len(os.Args) < 2 {
- usage()
- }
-
- var err error
- switch os.Args[1] {
- case "sync":
- if len(os.Args) != 2 {
- usage()
- }
- err = mainLoop()
- case "ainsl":
- err = ainsl.Main(os.Args)
- default:
- usage()
- }
-
- if err != nil {
- log.Fatalf("%s: %v", os.Args[0], err)
- }
-}
-
-func mainLoop() error {
- conn := safcm.NewGobConn(os.Stdin, os.Stdout)
-
- var logLevel safcm.LogLevel
- logFunc := func(level safcm.LogLevel, format string, a ...interface{}) {
- if logLevel >= level {
- conn.Send(safcm.MsgLog{
- Level: level,
- Text: fmt.Sprintf(format, a...),
- })
- }
- }
-
- var quitResp safcm.MsgQuitResp
- for {
- x, err := conn.Recv()
- if err != nil {
- return err
- }
-
- var resp safcm.Msg
- switch x := x.(type) {
- case safcm.MsgInfoReq:
- logLevel = x.LogLevel // set log level globally
- resp = info.Handle(x, run.ExecRunner{}, logFunc)
- case safcm.MsgSyncReq:
- resp = sync.Handle(x, run.ExecRunner{}, logFunc)
- case safcm.MsgQuitReq:
- resp = quitResp
- default:
- return fmt.Errorf("unsupported message %#v", x)
- }
-
- err = conn.Send(resp)
- if err != nil {
- return err
- }
- if resp == quitResp {
- break
- }
- }
- return nil