parameter를 좀더 명확하게
This commit is contained in:
15
rpc/rpc.go
15
rpc/rpc.go
@ -151,14 +151,14 @@ func (re *rpcEngine) loop(ctx context.Context, redisClient *redis.Client, chanNa
|
|||||||
|
|
||||||
var errNoReceiver = errors.New("no receiver")
|
var errNoReceiver = errors.New("no receiver")
|
||||||
|
|
||||||
type callContext struct {
|
type CallContext struct {
|
||||||
r Receiver
|
r Receiver
|
||||||
t primitive.ObjectID
|
t primitive.ObjectID
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrCanExecuteHere = errors.New("go ahead")
|
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) {
|
if c.r.TargetExists(c.t) {
|
||||||
// 여기 있네?
|
// 여기 있네?
|
||||||
return ErrCanExecuteHere
|
return ErrCanExecuteHere
|
||||||
@ -184,12 +184,15 @@ func (c callContext) call(args ...any) error {
|
|||||||
return engine.publish(serialized)
|
return engine.publish(serialized)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CallOrGo(r Receiver, target primitive.ObjectID, args ...any) error {
|
func Make(r Receiver) *CallContext {
|
||||||
cc := callContext{
|
return &CallContext{
|
||||||
r: r,
|
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) {
|
func encode(target primitive.ObjectID, receiver string, funcname string, args ...any) ([]byte, error) {
|
||||||
|
|||||||
@ -22,7 +22,7 @@ func (tr *testReceiver) TargetExists(tid primitive.ObjectID) bool {
|
|||||||
func (tr *testReceiver) TestFunc(a string, b string, c int) {
|
func (tr *testReceiver) TestFunc(a string, b string, c int) {
|
||||||
target := primitive.NewObjectID()
|
target := primitive.NewObjectID()
|
||||||
target[0] = byte(rand.Intn(2) * 20)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user