package states
import (
"fmt"
am "github.com/pancsta/asyncmachine-go/pkg/machine"
)
type DisposedStatesDef struct {
*am .StatesBase
RegisterDisposal string
Disposing string
Disposed string
}
type DisposedGroupsDef struct {
Disposed S
}
var DisposedSchema = am .Schema {
ssD .RegisterDisposal : {Multi : true },
ssD .Disposing : {Remove : sgD .Disposed },
ssD .Disposed : {Remove : SAdd (sgD .Disposed , S {ssB .Start })},
}
var (
ssD = am .NewStates (DisposedStatesDef {})
sgD = am .NewStateGroups (DisposedGroupsDef {
Disposed : S {ssD .RegisterDisposal , ssD .Disposing , ssD .Disposed },
})
DisposedStates = ssD
DisposedGroups = sgD
)
var DisposedArgHandler = "DisposedArgHandler"
type DisposedHandlers struct {
DisposedHandlers []am .HandlerDispose
}
func (h *DisposedHandlers ) RegisterDisposalEnter (e *am .Event ) bool {
fn , ok := e .Args [DisposedArgHandler ].(am .HandlerDispose )
ret := ok && fn != nil
if !ret && !e .IsCheck {
err := fmt .Errorf ("%w: DisposedArgHandler invalid" , am .ErrInvalidArgs )
e .Machine ().AddErr (err , nil )
}
return ret
}
func (h *DisposedHandlers ) RegisterDisposalState (e *am .Event ) {
fn := e .Args [DisposedArgHandler ].(am .HandlerDispose )
h .DisposedHandlers = append (h .DisposedHandlers , fn )
}
func (h *DisposedHandlers ) DisposingState (e *am .Event ) {
mach := e .Machine ()
ctx := mach .NewStateCtx (ssD .Disposing )
go func () {
for _ , fn := range h .DisposedHandlers {
if ctx .Err () != nil {
return
}
fn (mach .Id (), ctx )
}
mach .Add1 (ssD .Disposed , nil )
}()
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .