123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- package servers
- // import (
- // "errors"
- // "fmt"
- // "leafstalk/covenant/msg"
- // "leafstalk/module"
- // "leafstalk/network/cluster"
- // "leafstalk/otherutils/snowflake"
- // "leafstalk/otherutils/timercache"
- // "os"
- // "time"
- // )
- // func test() {
- // var req string
- // s := GetWorldServer()
- // RemoteCall(req, func() {
- // }, func() {
- // }, func() {
- // }, s, c)
- // }
- // var (
- // NodeNum int64
- // )
- // type RemoteCallService struct {
- // Skeleton *module.Skeleton
- // // Processor *json.Processor
- // timerCache *timercache.CacheKeys
- // // getAgent func() *cluster.ServerAgent
- // node int64
- // MsgIdSequence *snowflake.Node
- // }
- // // 1、每个模块有一个单独的节点
- // //
- // // 1、router中,解析消息ID,发往对应模块
- // func NewRemoteCallAndInit(m *module.Skeleton) (*RemoteCallService, error) {
- // rcs := new(RemoteCallService)
- // rcs.timerCache = timercache.NewCacheKeys(time.Second * 10)
- // NodeNum += 1
- // rcs.node = NodeNum
- // var err error
- // rcs.MsgIdSequence, err = snowflake.NewSecondNode(rcs.node, 10)
- // if err != nil {
- // return nil, err
- // }
- // rcs.Skeleton = m
- // // s.Processor = Processor
- // // s.getAgent = getAgent
- // rcs.Skeleton.RegisterChanRPC("RpcTimeout", handleRpcTimeout)
- // return rcs, nil
- // }
- // // 主协程处理超时消息
- // func handleRpcTimeout(args []interface{}) {
- // f, ok := args[0].(func(resp interface{}, err error))
- // if !ok {
- // fmt.Fprintf(os.Stderr, "handleRpcTimeout func type error. %#v", args[0])
- // return
- // }
- // f(nil, ErrTimeOut)
- // }
- // func (rcs *RemoteCallService) SendMsgTo(msg msg.RPCer, fSucess func(resp interface{}, err error), toServerAgent *cluster.ServerAgent, playerId int64, gateId int) error {
- // if toServerAgent == nil {
- // return ErrNoConnected
- // }
- // //定时缓存
- // k := rcs.timerCache.Add(fSucess, func(e *timercache.TimerEntry) {
- // //另一个协程,发送超时消息给处理协程
- // rcs.Skeleton.HandlerServer.Go("RpcTimeout", fSucess)
- // })
- // msg.SetMsgId(k)
- // //发送
- // err := toServerAgent.WriteServerRouteMsg(msg, playerId, gateId)
- // if err != nil {
- // rcs.timerCache.Remove(k)
- // return err
- // }
- // return nil
- // }
- // type RemoteCallSendParam struct {
- // toServerAgent *cluster.ServerAgent
- // playerId int64
- // gateId int
- // }
- // type SendOpt interface {
- // configureSendParam(opts *RemoteCallSendParam) error
- // }
- // type SendOptFn func(opts *RemoteCallSendParam) error
- // func (opt SendOptFn) configureSendParam(opts *RemoteCallSendParam) error {
- // return opt(opts)
- // }
- // func ReceiveServer(agent *cluster.ServerAgent) SendOpt {
- // return SendOptFn(func(opts *RemoteCallSendParam) error {
- // opts.toServerAgent = agent
- // return nil
- // })
- // }
- // func AboutPlayer(playerId int64, gateId int) SendOpt {
- // return SendOptFn(func(opts *RemoteCallSendParam) error {
- // opts.playerId = playerId
- // opts.gateId = gateId
- // return nil
- // })
- // }
- // func AboutPlayerAgent(playerAgent *servers.PlayerAgent) SendOpt {
- // return SendOptFn(func(opts *RemoteCallSendParam) error {
- // if playerAgent == nil {
- // return errors.New("playerAgent is nil")
- // }
- // opts.playerId = playerAgent.PlayerId
- // opts.gateId = playerAgent.GateId
- // return nil
- // })
- // }
- // // func RemoteCall()
- // func RemoteCall[T msg.RpcResponse](request msg.RPCer, sucess func(respMsg T),
- // fail func(errCode int, err error), noexpect func(exceptCode int),
- // rpcService *RemoteCallService, peerServer *server, opts ...SendOpt) {
- // processResponse := func(respa interface{}, err error) {
- // if err != nil {
- // noexpect(22) //超时
- // return
- // }
- // resp3, ok := respa.(T)
- // if !ok {
- // noexpect(23) //数据类型错误
- // return
- // }
- // // 添加失败打印错误,并不恢复
- // errCode := resp3.GetErrCode()
- // if errCode != 0 {
- // fail(errCode, fmt.Errorf("%v", errCode))
- // return
- // }
- // // 奖品发送给客户端
- // sucess(resp3)
- // }
- // config := RemoteCallSendParam{}
- // for _, opt := range opts {
- // if opt == nil {
- // continue
- // }
- // if err := opt.configureSendParam(&config); err != nil {
- // fail(25, err)
- // return
- // }
- // }
- // if transService == nil {
- // fail(26, fmt.Errorf("%v", 26))
- // return
- // }
- // //定时缓存
- // k := rpcService.timerCache.Add(fSucess, func(e *timercache.TimerEntry) {
- // //另一个协程,发送超时消息给处理协程
- // rpcService.Skeleton.HandlerServer.Go("RpcTimeout", fSucess)
- // })
- // msg.SetMsgId(k)
- // //发送
- // toServerAgent := config.toServerAgent
- // err := toServerAgent.WriteServerRouteMsg(msg, playerId, gateId)
- // if err != nil {
- // s.timerCache.Remove(k)
- // return err
- // }
- // // if toServerAgent == nil {
- // // toServerAgent = transService.getAgent()
- // // }
- // // err := transService.SendMsgTo2(request, processResponse, toServerAgent, config.playerId, config.gateId)
- // // if err != nil {
- // // fail(21, err)
- // // }
- // }
|