github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/time_sleep.go (about) 1 package funcs 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/nevalang/neva/internal/runtime" 8 ) 9 10 type timeSleep struct{} 11 12 func (timeSleep) Create(io runtime.FuncIO, _ runtime.Msg) (func(ctx context.Context), error) { 13 nsIn, err := io.In.Port("ns") 14 if err != nil { 15 return nil, err 16 } 17 18 sigOut, err := io.Out.Port("sig") 19 if err != nil { 20 return nil, err 21 } 22 23 return func(ctx context.Context) { 24 var nsMsg runtime.Msg 25 26 for { 27 select { 28 case <-ctx.Done(): 29 return 30 case nsMsg = <-nsIn: 31 } 32 33 time.Sleep(time.Duration(nsMsg.Int())) 34 35 select { 36 case <-ctx.Done(): 37 return 38 case sigOut <- nsMsg: 39 } 40 } 41 }, nil 42 }