75 lines
1.5 KiB
Go
75 lines
1.5 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
|
|
appName string
|
|
}
|
|
|
|
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, m.appName); 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
|
|
}
|
|
if appName, ok := data[1].(string); ok {
|
|
m.appName = appName
|
|
}
|
|
return m
|
|
}
|