rpc.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package servers
  2. // import (
  3. // "errors"
  4. // "fmt"
  5. // "leafstalk/covenant/msg"
  6. // "leafstalk/module"
  7. // "leafstalk/network/cluster"
  8. // "leafstalk/otherutils/snowflake"
  9. // "leafstalk/otherutils/timercache"
  10. // "os"
  11. // "time"
  12. // )
  13. // func test() {
  14. // var req string
  15. // s := GetWorldServer()
  16. // RemoteCall(req, func() {
  17. // }, func() {
  18. // }, func() {
  19. // }, s, c)
  20. // }
  21. // var (
  22. // NodeNum int64
  23. // )
  24. // type RemoteCallService struct {
  25. // Skeleton *module.Skeleton
  26. // // Processor *json.Processor
  27. // timerCache *timercache.CacheKeys
  28. // // getAgent func() *cluster.ServerAgent
  29. // node int64
  30. // MsgIdSequence *snowflake.Node
  31. // }
  32. // // 1、每个模块有一个单独的节点
  33. // //
  34. // // 1、router中,解析消息ID,发往对应模块
  35. // func NewRemoteCallAndInit(m *module.Skeleton) (*RemoteCallService, error) {
  36. // rcs := new(RemoteCallService)
  37. // rcs.timerCache = timercache.NewCacheKeys(time.Second * 10)
  38. // NodeNum += 1
  39. // rcs.node = NodeNum
  40. // var err error
  41. // rcs.MsgIdSequence, err = snowflake.NewSecondNode(rcs.node, 10)
  42. // if err != nil {
  43. // return nil, err
  44. // }
  45. // rcs.Skeleton = m
  46. // // s.Processor = Processor
  47. // // s.getAgent = getAgent
  48. // rcs.Skeleton.RegisterChanRPC("RpcTimeout", handleRpcTimeout)
  49. // return rcs, nil
  50. // }
  51. // // 主协程处理超时消息
  52. // func handleRpcTimeout(args []interface{}) {
  53. // f, ok := args[0].(func(resp interface{}, err error))
  54. // if !ok {
  55. // fmt.Fprintf(os.Stderr, "handleRpcTimeout func type error. %#v", args[0])
  56. // return
  57. // }
  58. // f(nil, ErrTimeOut)
  59. // }
  60. // func (rcs *RemoteCallService) SendMsgTo(msg msg.RPCer, fSucess func(resp interface{}, err error), toServerAgent *cluster.ServerAgent, playerId int64, gateId int) error {
  61. // if toServerAgent == nil {
  62. // return ErrNoConnected
  63. // }
  64. // //定时缓存
  65. // k := rcs.timerCache.Add(fSucess, func(e *timercache.TimerEntry) {
  66. // //另一个协程,发送超时消息给处理协程
  67. // rcs.Skeleton.HandlerServer.Go("RpcTimeout", fSucess)
  68. // })
  69. // msg.SetMsgId(k)
  70. // //发送
  71. // err := toServerAgent.WriteServerRouteMsg(msg, playerId, gateId)
  72. // if err != nil {
  73. // rcs.timerCache.Remove(k)
  74. // return err
  75. // }
  76. // return nil
  77. // }
  78. // type RemoteCallSendParam struct {
  79. // toServerAgent *cluster.ServerAgent
  80. // playerId int64
  81. // gateId int
  82. // }
  83. // type SendOpt interface {
  84. // configureSendParam(opts *RemoteCallSendParam) error
  85. // }
  86. // type SendOptFn func(opts *RemoteCallSendParam) error
  87. // func (opt SendOptFn) configureSendParam(opts *RemoteCallSendParam) error {
  88. // return opt(opts)
  89. // }
  90. // func ReceiveServer(agent *cluster.ServerAgent) SendOpt {
  91. // return SendOptFn(func(opts *RemoteCallSendParam) error {
  92. // opts.toServerAgent = agent
  93. // return nil
  94. // })
  95. // }
  96. // func AboutPlayer(playerId int64, gateId int) SendOpt {
  97. // return SendOptFn(func(opts *RemoteCallSendParam) error {
  98. // opts.playerId = playerId
  99. // opts.gateId = gateId
  100. // return nil
  101. // })
  102. // }
  103. // func AboutPlayerAgent(playerAgent *servers.PlayerAgent) SendOpt {
  104. // return SendOptFn(func(opts *RemoteCallSendParam) error {
  105. // if playerAgent == nil {
  106. // return errors.New("playerAgent is nil")
  107. // }
  108. // opts.playerId = playerAgent.PlayerId
  109. // opts.gateId = playerAgent.GateId
  110. // return nil
  111. // })
  112. // }
  113. // // func RemoteCall()
  114. // func RemoteCall[T msg.RpcResponse](request msg.RPCer, sucess func(respMsg T),
  115. // fail func(errCode int, err error), noexpect func(exceptCode int),
  116. // rpcService *RemoteCallService, peerServer *server, opts ...SendOpt) {
  117. // processResponse := func(respa interface{}, err error) {
  118. // if err != nil {
  119. // noexpect(22) //超时
  120. // return
  121. // }
  122. // resp3, ok := respa.(T)
  123. // if !ok {
  124. // noexpect(23) //数据类型错误
  125. // return
  126. // }
  127. // // 添加失败打印错误,并不恢复
  128. // errCode := resp3.GetErrCode()
  129. // if errCode != 0 {
  130. // fail(errCode, fmt.Errorf("%v", errCode))
  131. // return
  132. // }
  133. // // 奖品发送给客户端
  134. // sucess(resp3)
  135. // }
  136. // config := RemoteCallSendParam{}
  137. // for _, opt := range opts {
  138. // if opt == nil {
  139. // continue
  140. // }
  141. // if err := opt.configureSendParam(&config); err != nil {
  142. // fail(25, err)
  143. // return
  144. // }
  145. // }
  146. // if transService == nil {
  147. // fail(26, fmt.Errorf("%v", 26))
  148. // return
  149. // }
  150. // //定时缓存
  151. // k := rpcService.timerCache.Add(fSucess, func(e *timercache.TimerEntry) {
  152. // //另一个协程,发送超时消息给处理协程
  153. // rpcService.Skeleton.HandlerServer.Go("RpcTimeout", fSucess)
  154. // })
  155. // msg.SetMsgId(k)
  156. // //发送
  157. // toServerAgent := config.toServerAgent
  158. // err := toServerAgent.WriteServerRouteMsg(msg, playerId, gateId)
  159. // if err != nil {
  160. // s.timerCache.Remove(k)
  161. // return err
  162. // }
  163. // // if toServerAgent == nil {
  164. // // toServerAgent = transService.getAgent()
  165. // // }
  166. // // err := transService.SendMsgTo2(request, processResponse, toServerAgent, config.playerId, config.gateId)
  167. // // if err != nil {
  168. // // fail(21, err)
  169. // // }
  170. // }