callctx 수정
This commit is contained in:
10
rpc/rpc.go
10
rpc/rpc.go
@ -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 {
|
||||||
|
|||||||
@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user