diff --git a/modules/comp_model.go b/modules/comp_model.go index f84593734..4f0c36f2e 100644 --- a/modules/comp_model.go +++ b/modules/comp_model.go @@ -28,8 +28,12 @@ type MCompModel struct { //组件初始化接口 func (this *MCompModel) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.ModuleCompBase.Init(service, module, comp, options) - this.DB = db.Local().Mgo - this.Redis = db.Local().Redis + var conn *db.DBConn + if conn, err = db.Local(); err != nil { + return + } + this.DB = conn.Mgo + this.Redis = conn.Redis this.Expired = time.Hour return } @@ -40,7 +44,11 @@ func (this *MCompModel) Start() (err error) { log.Panicf("TableName is nil") return } - this.DBModel = db.NewDBModel(this.TableName, this.Expired, db.Local()) + var conn *db.DBConn + if conn, err = db.Local(); err != nil { + return + } + this.DBModel = db.NewDBModel(this.TableName, this.Expired, conn) return } diff --git a/modules/modulebase.go b/modules/modulebase.go index d61257afe..201b2775e 100644 --- a/modules/modulebase.go +++ b/modules/modulebase.go @@ -310,12 +310,20 @@ func (this *ModuleBase) DispenseRes(session comm.IUserSession, res []*cfg.Gameat } //跨服对象获取数据操作对象 -func (this *ModuleBase) GetDBNodule(session comm.IUserSession, tableName string, expired time.Duration) *db.DBModel { +func (this *ModuleBase) GetDBNodule(session comm.IUserSession, tableName string, expired time.Duration) (model *db.DBModel, err error) { + var conn *db.DBConn if session.GetServiecTag() == this.service.GetTag() { - return db.NewDBModel(tableName, expired, db.Local()) + if conn, err = db.Local(); err != nil { + return + } + return } else { - return db.NewDBModel(tableName, expired, db.ServerDBConn(session.GetServiecTag())) + if conn, err = db.ServerDBConn(session.GetServiecTag()); err != nil { + return + } } + model = db.NewDBModel(tableName, expired, conn) + return } //日志接口 diff --git a/modules/moonfantasy/modelDream.go b/modules/moonfantasy/modelDream.go index 61131ee8f..5d262e436 100644 --- a/modules/moonfantasy/modelDream.go +++ b/modules/moonfantasy/modelDream.go @@ -10,6 +10,7 @@ import ( "go_dreamfactory/modules" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" + "go_dreamfactory/sys/db" "time" "go.mongodb.org/mongo-driver/bson/primitive" @@ -140,9 +141,14 @@ func (this *modelDreamComp) trigger(session comm.IUserSession, source *pb.Battle ///查询好友数据 func (this *modelDreamComp) noticeuserfriend(session comm.IUserSession, mid string, chat *pb.DBChat) (code pb.ErrorCode) { var ( - err error + model *db.DBModel + err error ) - model := this.module.GetDBNodule(session, comm.TableFriend, 0) + if model, err = this.module.GetDBNodule(session, comm.TableFriend, 0); err != nil { + code = pb.ErrorCode_DBError + this.module.Errorf("session:%v err:%v", session, err) + return + } friend := &pb.DBFriend{Uid: session.GetUserId(), FriendIds: make([]string, 0)} if err = model.Get(session.GetUserId(), friend); err != nil && err != mgo.MongodbNil { this.module.Errorln(err) diff --git a/services/comp_gateroute.go b/services/comp_gateroute.go index d6284d7fa..d537543f1 100644 --- a/services/comp_gateroute.go +++ b/services/comp_gateroute.go @@ -182,7 +182,12 @@ func (this *SCompGateRoute) ReceiveMsg(ctx context.Context, args *pb.AgentMessag //RPC_NoticeUserClose 接收用户登录通知 func (this *SCompGateRoute) NoticeUserLogin(ctx context.Context, args *pb.NoticeUserLoginReq, reply *pb.RPCMessageReply) error { - model := db.NewDBModel(comm.TableSession, 0, db.Local()) + conn, err := db.Local() + if err != nil { + log.Errorf("[RPC] NoticeUserLogin err: %v", err) + return err + } + model := db.NewDBModel(comm.TableSession, 0, conn) model.AddList(comm.RDS_SESSION, args.UserId, map[string]interface{}{ "uid": args.UserId, "sessionId": args.UserSessionId, diff --git a/sys/db/core.go b/sys/db/core.go index c15e8028a..e1d1693fb 100644 --- a/sys/db/core.go +++ b/sys/db/core.go @@ -7,11 +7,11 @@ import ( type ( ISys interface { //本服数据连接 - Local() *DBConn + Local() (conn *DBConn, err error) //本服数据连接 - Cross() *DBConn + Cross() (conn *DBConn, err error) //跨服列表数据层连接 - ServerDBConn(stage string) (conn *DBConn) + ServerDBConn(stage string) (conn *DBConn, err error) ///获取区服列表标签 GetServerTags() []string //更新数据过期 @@ -47,15 +47,15 @@ func NewSys(option ...Option) (sys ISys, err error) { return } -func Local() *DBConn { +func Local() (conn *DBConn, err error) { return defsys.Local() } -func Cross() *DBConn { +func Cross() (conn *DBConn, err error) { return defsys.Cross() } -func ServerDBConn(stage string) (conn *DBConn) { +func ServerDBConn(stage string) (conn *DBConn, err error) { return defsys.ServerDBConn(stage) } diff --git a/sys/db/db.go b/sys/db/db.go index 747365266..99fa32287 100644 --- a/sys/db/db.go +++ b/sys/db/db.go @@ -1,6 +1,7 @@ package db import ( + "errors" "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" @@ -98,25 +99,27 @@ func (this *DB) readercrossconf(path string) (err error) { } return } -func (this *DB) Local() *DBConn { - if this.local == nil { - log.Panic("LocalDBConn on init") +func (this *DB) Local() (conn *DBConn, err error) { + conn = this.local + if conn == nil { + err = errors.New("LocalDBConn on init") } - return this.local + return } -func (this *DB) Cross() *DBConn { - if this.cross == nil { - log.Panic("CrossDBConn on init") +func (this *DB) Cross() (conn *DBConn, err error) { + conn = this.cross + if conn == nil { + err = errors.New("CrossDBConn on init") } - return this.cross + return } -func (this *DB) ServerDBConn(stage string) (conn *DBConn) { +func (this *DB) ServerDBConn(stage string) (conn *DBConn, err error) { ok := false conn, ok = this.servers[stage] if !ok { - log.Panicf("DBConn:%s on init", stage) + err = fmt.Errorf("DBConn:%s on init", stage) } return }