github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/optional/time/sleep.go (about)

     1  package time
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/lmorg/murex/lang"
     7  	"github.com/lmorg/murex/lang/types"
     8  )
     9  
    10  func init() {
    11  	lang.DefineFunction("sleep", cmdSleep, types.Null)
    12  }
    13  
    14  func cmdSleep(p *lang.Process) error {
    15  	p.Stdout.SetDataType(types.Null)
    16  
    17  	i, err := p.Parameters.Int(0)
    18  	if err != nil {
    19  		return err
    20  	}
    21  
    22  	sleep := time.After(time.Duration(int64(i)) * time.Second)
    23  
    24  	for {
    25  		select {
    26  		case <-p.Context.Done():
    27  			return nil
    28  
    29  		case <-sleep:
    30  			return nil
    31  
    32  		case <-p.HasStopped:
    33  			<-p.WaitForStopped
    34  		}
    35  	}
    36  }