diff --git a/rpc/rpc.go b/rpc/rpc.go index fa6090a..3bcff82 100644 --- a/rpc/rpc.go +++ b/rpc/rpc.go @@ -151,14 +151,14 @@ func (re *rpcEngine) loop(ctx context.Context, redisClient *redis.Client, chanNa var errNoReceiver = errors.New("no receiver") -type callContext struct { +type CallContext struct { r Receiver t primitive.ObjectID } var ErrCanExecuteHere = errors.New("go ahead") -func (c callContext) call(args ...any) error { +func (c *CallContext) Call(args ...any) error { if c.r.TargetExists(c.t) { // 여기 있네? return ErrCanExecuteHere @@ -184,12 +184,15 @@ func (c callContext) call(args ...any) error { return engine.publish(serialized) } -func CallOrGo(r Receiver, target primitive.ObjectID, args ...any) error { - cc := callContext{ +func Make(r Receiver) *CallContext { + return &CallContext{ r: r, - t: target, } - return cc.call(args...) +} + +func (cc *CallContext) To(target primitive.ObjectID) *CallContext { + cc.t = target + return cc } func encode(target primitive.ObjectID, receiver string, funcname string, args ...any) ([]byte, error) { diff --git a/rpc/rpc_test.go b/rpc/rpc_test.go index 59479c8..ccc3071 100644 --- a/rpc/rpc_test.go +++ b/rpc/rpc_test.go @@ -22,7 +22,7 @@ func (tr *testReceiver) TargetExists(tid primitive.ObjectID) bool { func (tr *testReceiver) TestFunc(a string, b string, c int) { target := primitive.NewObjectID() target[0] = byte(rand.Intn(2) * 20) - if CallOrGo(tr, target, a, b) != ErrCanExecuteHere { + if Make(tr).To(target).Call(a, b, c) != ErrCanExecuteHere { return }