mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-15 08:14:46 +08:00
合并Service中的Event、RpcResponse、RpcRequest管道
This commit is contained in:
@@ -67,11 +67,11 @@ func (client *Client) Connect(id int,addr string) error {
|
||||
}
|
||||
|
||||
func (client *Client) startCheckRpcCallTimer(){
|
||||
t:=timer.NewTimer(3*time.Second)
|
||||
t:=timer.NewTimer(5*time.Second)
|
||||
for{
|
||||
select {
|
||||
case timer:=<- t.C:
|
||||
timer.SetupTimer(time.Now())
|
||||
case cTimer:=<- t.C:
|
||||
cTimer.SetupTimer(time.Now())
|
||||
client.checkRpcCallTimeout()
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@ func (client *Client) startCheckRpcCallTimer(){
|
||||
func (client *Client) makeCallFail(call *Call){
|
||||
client.removePending(call.Seq)
|
||||
if call.callback!=nil && call.callback.IsValid() {
|
||||
call.rpcHandler.(*RpcHandler).callResponseCallBack <-call
|
||||
call.rpcHandler.PushRpcResponse(call)
|
||||
}else{
|
||||
call.done <- call
|
||||
}
|
||||
@@ -310,7 +310,7 @@ func (client *Client) Run(){
|
||||
}
|
||||
|
||||
if v.callback!=nil && v.callback.IsValid() {
|
||||
v.rpcHandler.(*RpcHandler).callResponseCallBack <-v
|
||||
v.rpcHandler.PushRpcResponse(v)
|
||||
}else{
|
||||
v.done <- v
|
||||
}
|
||||
|
||||
@@ -46,15 +46,19 @@ type RawRpcCallBack interface {
|
||||
CB(data interface{})
|
||||
}
|
||||
|
||||
type IRpcHandlerChannel interface {
|
||||
PushRpcResponse(call *Call) error
|
||||
PushRpcRequest(rpcRequest *RpcRequest) error
|
||||
}
|
||||
|
||||
type RpcHandler struct {
|
||||
callRequest chan *RpcRequest
|
||||
IRpcHandlerChannel
|
||||
|
||||
rpcHandler IRpcHandler
|
||||
mapFunctions map[string]RpcMethodInfo
|
||||
mapRawFunctions map[uint32] RawRpcCallBack
|
||||
funcRpcClient FuncRpcClient
|
||||
funcRpcServer FuncRpcServer
|
||||
|
||||
callResponseCallBack chan *Call //异步返回的回调
|
||||
}
|
||||
|
||||
type TriggerRpcEvent func(bConnect bool,clientSeq uint32,nodeId int)
|
||||
@@ -64,17 +68,13 @@ type IRpcListener interface {
|
||||
}
|
||||
|
||||
type IRpcHandler interface {
|
||||
IRpcHandlerChannel
|
||||
GetName() string
|
||||
InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer)
|
||||
InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer,rpcHandlerChannel IRpcHandlerChannel)
|
||||
GetRpcHandler() IRpcHandler
|
||||
PushRequest(callInfo *RpcRequest) error
|
||||
HandlerRpcRequest(request *RpcRequest)
|
||||
HandlerRpcResponseCB(call *Call)
|
||||
|
||||
GetRpcRequestChan() chan *RpcRequest
|
||||
GetRpcResponseChan() chan *Call
|
||||
CallMethod(ServiceMethod string,param interface{},reply interface{}) error
|
||||
|
||||
AsyncCall(serviceMethod string,args interface{},callback interface{}) error
|
||||
Call(serviceMethod string,args interface{},reply interface{}) error
|
||||
Go(serviceMethod string,args interface{}) error
|
||||
@@ -100,9 +100,8 @@ func (handler *RpcHandler) GetRpcHandler() IRpcHandler{
|
||||
return handler.rpcHandler
|
||||
}
|
||||
|
||||
func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer) {
|
||||
handler.callRequest = make(chan *RpcRequest,1000000)
|
||||
handler.callResponseCallBack = make(chan *Call,1000000)
|
||||
func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun FuncRpcClient,getServerFun FuncRpcServer,rpcHandlerChannel IRpcHandlerChannel) {
|
||||
handler.IRpcHandlerChannel = rpcHandlerChannel
|
||||
handler.mapRawFunctions = make(map[uint32] RawRpcCallBack)
|
||||
handler.rpcHandler = rpcHandler
|
||||
handler.mapFunctions = map[string]RpcMethodInfo{}
|
||||
@@ -114,8 +113,8 @@ func (handler *RpcHandler) InitRpcHandler(rpcHandler IRpcHandler,getClientFun Fu
|
||||
|
||||
// Is this an exported - upper case - name?
|
||||
func isExported(name string) bool {
|
||||
rune, _ := utf8.DecodeRuneInString(name)
|
||||
return unicode.IsUpper(rune)
|
||||
r, _ := utf8.DecodeRuneInString(name)
|
||||
return unicode.IsUpper(r)
|
||||
}
|
||||
|
||||
// Is this type exported or a builtin?
|
||||
@@ -190,23 +189,6 @@ func (handler *RpcHandler) RegisterRpc(rpcHandler IRpcHandler) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (handler *RpcHandler) PushRequest(req *RpcRequest) error{
|
||||
if len(handler.callRequest) >= cap(handler.callRequest){
|
||||
return fmt.Errorf("RpcHandler %s Rpc Channel is full", handler.GetName())
|
||||
}
|
||||
|
||||
handler.callRequest <- req
|
||||
return nil
|
||||
}
|
||||
|
||||
func (handler *RpcHandler) GetRpcRequestChan() chan *RpcRequest {
|
||||
return handler.callRequest
|
||||
}
|
||||
|
||||
func (handler *RpcHandler) GetRpcResponseChan() chan *Call{
|
||||
return handler.callResponseCallBack
|
||||
}
|
||||
|
||||
func (handler *RpcHandler) HandlerRpcResponseCB(call *Call){
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
|
||||
@@ -185,7 +185,7 @@ func (agent *RpcAgent) Run() {
|
||||
continue
|
||||
}
|
||||
|
||||
err = rpcHandler.PushRequest(req)
|
||||
err = rpcHandler.PushRpcRequest(req)
|
||||
if err != nil {
|
||||
rpcError := RpcError(err.Error())
|
||||
|
||||
@@ -268,7 +268,6 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor,client *Clien
|
||||
return pCall
|
||||
}
|
||||
}
|
||||
//req.inputArgs = inputArgs
|
||||
|
||||
if noReply == false {
|
||||
client.AddPending(pCall)
|
||||
@@ -303,7 +302,7 @@ func (server *Server) selfNodeRpcHandlerGo(processor IRpcProcessor,client *Clien
|
||||
}
|
||||
}
|
||||
|
||||
err := rpcHandler.PushRequest(req)
|
||||
err := rpcHandler.PushRpcRequest(req)
|
||||
if err != nil {
|
||||
ReleaseRpcRequest(req)
|
||||
pCall.Err = err
|
||||
@@ -352,12 +351,12 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client,callerRpcHandler
|
||||
if Returns!=nil {
|
||||
pCall.Reply = Returns
|
||||
}
|
||||
pCall.rpcHandler.(*RpcHandler).callResponseCallBack <-pCall
|
||||
pCall.rpcHandler.PushRpcResponse(pCall)
|
||||
ReleaseRpcRequest(req)
|
||||
}
|
||||
}
|
||||
|
||||
err := rpcHandler.PushRequest(req)
|
||||
err := rpcHandler.PushRpcRequest(req)
|
||||
if err != nil {
|
||||
ReleaseRpcRequest(req)
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user