package main

import (
	
	
	
	
	

	testutils 
	amhelp 
	am 
	
	
	
)

var ssW = states.WorkerStates

func main() {
	 := context.Background()
	 := flag.String("a", "", "addr")
	flag.Parse()
	if  == nil || * == "" {
		panic("addr is required")
	}
	 := *

	slog.Info("fork worker", "addr", )

	// worker

	// machine init
	 := am.New(context.Background(), testutils.RelsNodeWorkerSchema, &am.Opts{
		Id: "t-worker-" + })
	 := .VerifyStates(testutils.RelsNodeWorkerStates)
	if  != nil {
		panic()
	}

	if os.Getenv(am.EnvAmDebug) != "" {
		.SemLogger().SetLevel(am.LogEverything)
		.HandlerTimeout = 2 * time.Minute
	}
	,  := node.NewWorker(, "NTW", .Schema(),
		.StateNames(), nil)
	if  != nil {
		panic()
	}
	 = .Mach.BindHandlers(&workerHandlers{Mach: })
	if  != nil {
		panic()
	}

	// connect Worker to the bootstrap machine
	 := .Start()
	if  != am.Executed {
		panic(.Mach.Err())
	}
	 = amhelp.WaitForAll(, 1*time.Second,
		.Mach.When1(ssW.RpcReady, nil))
	if  != nil {
		panic()
	}

	// wait for connection
	_ = amhelp.WaitForAll(, 3*time.Second,
		.Mach.When1(ssW.SuperConnected, nil))
	// block until disconnected
	<-.Mach.WhenNot1(ssW.SuperConnected, nil)
}

type workerHandlers struct {
	Mach *am.Machine
}

func ( *workerHandlers) ( *am.Event) {
	 := .Args["input"].(int)

	 := &rpc.ArgsPayload{
		Name:   .Mach.Id(),
		Data:    * ,
		Source: .Machine().Id(),
	}

	.Machine().Add1(ssW.ClientSendPayload, rpc.PassRpc(&rpc.A{
		Name:    .Mach.Id(),
		Payload: ,
	}))
}