package benchmark_grpc
import (
"context"
"errors"
"github.com/pancsta/asyncmachine-go/examples/benchmark_grpc/states"
"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"
)
var ss = states .WorkerStates
type WorkerArpcServer struct {
Worker *Worker
Mach *am .Machine
RPC *arpc .Server
}
func NewWorkerArpcServer (
ctx context .Context , addr string , worker *Worker ,
) (*WorkerArpcServer , error ) {
if worker == nil {
return nil , errors .New ("worker is nil" )
}
w := &WorkerArpcServer {
Worker : worker ,
Mach : am .New (ctx , states .WorkerSchema , &am .Opts {Id : "worker" }),
}
err := w .Mach .VerifyStates (ss .Names ())
if err != nil {
return nil , err
}
err = w .Mach .BindHandlers (w )
if err != nil {
return nil , err
}
worker .Subscribe (func () {
w .Mach .Add1 (ss .Event , nil )
})
s , err := arpc .NewServer (ctx , addr , "worker" , w .Mach , nil )
if err != nil {
return nil , err
}
w .RPC = s
logLvl := am .EnvLogLevel ("" )
w .RPC .Mach .SemLogger ().SetSimple (w .log , logLvl )
w .Mach .SemLogger ().SetSimple (w .log , logLvl )
helpers .MachDebugEnv (w .RPC .Mach )
helpers .MachDebugEnv (w .Mach )
w .RPC .Start ()
<-w .RPC .Mach .When1 (ssrpc .ServerStates .RpcReady , nil )
return w , nil
}
func (w *WorkerArpcServer ) log (msg string , args ...any ) {
l ("arpc-server" , msg , args ...)
}
func (w *WorkerArpcServer ) CallOpEnter (e *am .Event ) bool {
_ , ok := e .Args ["Op" ].(Op )
return ok
}
func (w *WorkerArpcServer ) CallOpState (e *am .Event ) {
w .Mach .Remove1 (ss .CallOp , nil )
op := e .Args ["Op" ].(Op )
w .Worker .CallOp (op )
}
func (w *WorkerArpcServer ) EventState (_ *am .Event ) {
w .Mach .Remove1 (ss .Event , nil )
switch w .Worker .GetValue () {
case Value1 :
w .Mach .Add1 (ss .Value1 , nil )
case Value2 :
w .Mach .Add1 (ss .Value2 , nil )
case Value3 :
w .Mach .Add1 (ss .Value3 , nil )
}
}
func (w *WorkerArpcServer ) StartState (_ *am .Event ) {
w .Worker .Start ()
}
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 .