Files
service-common/module/db.go

71 lines
1.4 KiB
Go

package module
import (
"git.hlsq.asia/mmorpg/service-common/config"
"git.hlsq.asia/mmorpg/service-common/db/etcd"
"git.hlsq.asia/mmorpg/service-common/db/kafka"
"git.hlsq.asia/mmorpg/service-common/db/mysql"
"git.hlsq.asia/mmorpg/service-common/db/redis"
"git.hlsq.asia/mmorpg/service-common/log"
)
// DB 数据库模块
type DB struct {
DefaultModule
cfg *config.DBConfig
}
func (m *DB) Init() error {
// ETCD
if m.cfg.Etcd != nil {
if err := etcd.Init(m.cfg.Etcd); err != nil {
return err
}
}
// MYSQL
if m.cfg.MySQL != nil {
if err := mysql.Init(m.cfg.MySQL); err != nil {
return err
}
}
// REDIS
if m.cfg.Redis != nil {
if err := redis.Init(m.cfg.Redis); err != nil {
return err
}
}
// KAFKA
if m.cfg.Kafka != nil {
if err := kafka.Init(m.cfg.Kafka); err != nil {
return err
}
}
return nil
}
func (m *DB) Stop() error {
if err := etcd.Close(); err != nil {
log.Errorf("close etcd failed: %v", err)
}
if err := mysql.Close(); err != nil {
log.Errorf("close mysql failed: %v", err)
}
if err := redis.Close(); err != nil {
log.Errorf("close redis failed: %v", err)
}
if err := kafka.Close(); err != nil {
log.Errorf("close kafka failed: %v", err)
}
return nil
}
func (m *DB) Bind(data ...any) Module {
if data == nil || len(data) == 0 {
return m
}
if cfg, ok := data[0].(*config.DBConfig); ok {
m.cfg = cfg
}
return m
}