callctx 수정

This commit is contained in:
2023-07-10 10:53:49 +09:00
parent e912c88993
commit 98efbc2875
2 changed files with 42 additions and 5 deletions

View File

@ -6,6 +6,7 @@ import (
"encoding/gob" "encoding/gob"
"errors" "errors"
"fmt" "fmt"
"path"
"reflect" "reflect"
"runtime" "runtime"
"strings" "strings"
@ -148,15 +149,16 @@ func (c callContext) call(args ...any) error {
} }
pc := make([]uintptr, 1) pc := make([]uintptr, 1)
n := runtime.Callers(2, pc[:]) n := runtime.Callers(3, pc[:])
if n < 1 { if n < 1 {
return errNoReceiver return errNoReceiver
} }
frame, _ := runtime.CallersFrames(pc).Next() frame, _ := runtime.CallersFrames(pc).Next()
prf := strings.Split(frame.Function, ".") prf := path.Base(frame.Function)
rname := prf[1] lastdot := strings.LastIndex(prf, ".")
funcname := prf[2] rname := prf[:lastdot]
funcname := prf[lastdot+1:]
serialized, err := encode(c.t, rname, funcname, args...) serialized, err := encode(c.t, rname, funcname, args...)
if err != nil { if err != nil {

View File

@ -1,7 +1,42 @@
package rpc package rpc
import "testing" import (
"context"
"testing"
"go.mongodb.org/mongo-driver/bson/primitive"
"repositories.action2quare.com/ayo/gocommon"
"repositories.action2quare.com/ayo/gocommon/logger"
)
type testReceiver struct {
}
func (tr *testReceiver) TargetExists(tid primitive.ObjectID) bool {
return tid[0] >= 10
}
func (tr *testReceiver) TestFunc(a string, b string) {
logger.Println("TestFunc :", a, b)
target := primitive.NewObjectID()
target[0] = 0
if CallOrGo(tr, target, a, b) != ErrCanExecuteHere {
return
}
logger.Println(a, b)
}
func TestRpc(t *testing.T) { func TestRpc(t *testing.T) {
var tr testReceiver
RegistReceiver(&tr)
myctx, cancel := context.WithCancel(context.Background())
redisClient, _ := gocommon.NewRedisClient("redis://192.168.8.94:6379", 0)
Start(myctx, redisClient)
tr.TestFunc("aaa", "bb")
<-myctx.Done()
cancel()
} }