package main
import (
"context"
"log"
example "github.com/pancsta/asyncmachine-go/examples/wasm"
"github.com/pancsta/asyncmachine-go/examples/wasm/states"
"github.com/pancsta/asyncmachine-go/internal/utils"
amhelp "github.com/pancsta/asyncmachine-go/pkg/helpers"
am "github.com/pancsta/asyncmachine-go/pkg/machine"
arpc "github.com/pancsta/asyncmachine-go/pkg/rpc"
ssrpc "github.com/pancsta/asyncmachine-go/pkg/rpc/states"
ampipe "github.com/pancsta/asyncmachine-go/pkg/states/pipes"
)
var ssF = states .FooStates
var ssB = states .BarStates
var Pass = example .Pass
var PassRpc = example .PassRpc
type A = example .A
type ARpc = example .ARpc
func initMachines(
ctx context .Context , barHandlers any , fooHandlers any ,
) (*am .Machine , *arpc .Client , *am .Machine ) {
sessId := utils .RandId (3 )
barMach , err := am .NewCommon (ctx , "browser-bar-" +sessId , states .BarSchema , ssB .Names (), barHandlers , nil , nil )
if err != nil {
log .Fatal (err .Error())
}
barMach .SemLogger ().SetArgsMapper (example .LogArgs )
amhelp .MachDebugEnv (barMach )
arpc .MachReplWs (barMach , example .EnvRelayHttpAddr , &arpc .ReplOpts {
WebSocketTunnel : arpc .WsListenPath ("repl-" +barMach .Id (), example .EnvBarReplAddr ),
Args : ARpc {},
ParseRpc : example .ParseRpc ,
})
srv , err := arpc .NewServer (ctx , example .EnvRelayHttpAddr , barMach .Id (), barMach , &arpc .ServerOpts {
WebSocketTunnel : arpc .WsListenPath (barMach .Id (), example .EnvBarTcpAddr ),
Parent : barMach ,
})
if err != nil {
log .Fatal (err .Error())
}
srv .Start (nil )
fooHandlerMach , err := am .NewCommon (ctx , "browser-foo-" +sessId , states .FooSchema , ssF .Names (), fooHandlers , barMach , &am .Opts {
Tags : []string {"rpc-handler" },
})
if err != nil {
log .Fatal (err .Error())
}
amhelp .MachDebugEnv (fooHandlerMach )
fooHandlerMach .SemLogger ().SetArgsMapper (example .LogArgs )
foo , err := arpc .NewClient (ctx , example .EnvFooWsAddr , fooHandlerMach .Id (), states .FooSchema , &arpc .ClientOpts {
Parent : fooHandlerMach ,
WebSocket : "/" ,
})
if err != nil {
log .Fatal (err .Error())
}
foo .Start (nil )
<-foo .Mach .When1 (ssrpc .ClientStates .Ready , nil )
if err := ampipe .BindAny (foo .NetMach , fooHandlerMach ); err != nil {
log .Fatal (err .Error())
}
fooHandlerMach .Set (foo .NetMach .ActiveStates (nil ), nil )
barMach .Add1 (ssB .Start , nil )
return barMach , foo , fooHandlerMach
}
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 .