package modules import ( "context" "go_dreamfactory/comm" "go_dreamfactory/pb" "go_dreamfactory/lego/base" "go_dreamfactory/lego/core" "go_dreamfactory/lego/core/cbase" "go_dreamfactory/lego/sys/log" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" ) /* 基础业务模块实现 封装一些通用的接口提供给业务模块使用 */ type ModuleBase struct { cbase.ModuleBase service base.IRPCXService } //模块初始化接口 func (this *ModuleBase) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) return } //向指定用户发送消息 func (this *ModuleBase) SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error) { reply := &pb.RPCMessageReply{} data, _ := ptypes.MarshalAny(msg) if _, err = this.service.RpcGoById(user.GatewayServiceId, string(comm.Rpc_GatewayAgentSendMsg), context.Background(), &pb.AgentSendMessageReq{ UserSessionId: user.SessionId, MainType: mainType, SubType: subType, Data: data, }, reply); err != nil { log.Errorf("SendMsgToUser%d:%s [%s.%s] err:%v", user.UserData.UserId, user.SessionId, mainType, subType, err) } return } //向多个用户发送消息 func (this *ModuleBase) SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error) { var ( gateways map[string][]string = make(map[string][]string) gateway []string ok bool ) for _, v := range user { if gateway, ok = gateways[v.GatewayServiceId]; !ok { gateway = make([]string, 0) gateways[v.GatewayServiceId] = gateway } gateway = append(gateway, v.SessionId) } reply := &pb.RPCMessageReply{} data, _ := ptypes.MarshalAny(msg) for k, v := range gateways { if _, err = this.service.RpcGoById(k, string(comm.Rpc_GatewayAgentSendMsg), context.Background(), &pb.BatchMessageReq{ UserSessionIds: v, MainType: mainType, SubType: subType, Data: data, }, reply); err != nil { log.Errorf("SendMsgToUsers:%s->%s.%s err:%v", k, mainType, subType, err) } } return }