blob: d6b9c7c229e967dc05d4debd70cb2309e53377f5 [file] [log] [blame]
package core
import (
"fmt"
"io"
"time"
"v.io/core/veyron/lib/modules"
)
func init() {
modules.RegisterFunction(SleepCommand, `[duration]
sleep for a time(in go time.Duration format): defaults to 1s`, sleep)
modules.RegisterFunction(TimeCommand, `
prints the current time`, now)
}
func sleep(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
d := time.Second
if len(args) > 1 {
var err error
if d, err = time.ParseDuration(args[1]); err != nil {
return err
}
}
fmt.Fprintf(stdout, "Sleeping for %s\n", d)
eof := make(chan struct{})
go func() {
modules.WaitForEOF(stdin)
close(eof)
}()
then := time.Now()
select {
case <-time.After(d):
fmt.Fprintf(stdout, "Slept for %s\n", time.Now().Sub(then))
case <-eof:
fmt.Fprintf(stdout, "Aborted after %s\n", time.Now().Sub(then))
}
return nil
}
func now(stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
fmt.Fprintf(stdout, "%s\n", time.Now())
return nil
}