This repository has been archived on 2026-01-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Game/Server/common/db/mongo/mongo.go
2025-06-25 00:01:48 +08:00

78 lines
2.0 KiB
Go

package mongo
import (
commonConfig "common/config"
"common/log"
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"go.mongodb.org/mongo-driver/event"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"io/ioutil"
)
var (
MDB *mongo.Client
DefaultDB *mongo.Database
ChatDB *mongo.Database
ErrNoDocuments = mongo.ErrNoDocuments
)
func Init(cfg *commonConfig.MongoConfig) error {
dialect := ""
if len(cfg.User) > 0 && len(cfg.Password) > 0 {
dialect = fmt.Sprintf("mongodb://%s:%s@%s:%d/admin?appname=MongoDB", cfg.User, cfg.Password, cfg.Host, cfg.Port)
} else {
dialect = fmt.Sprintf("mongodb://%s:%d/admin?readPreference=primary&appname=MongoDB&ssl=false", cfg.Host, cfg.Port)
}
var clientOptions *options.ClientOptions
if len(cfg.SSLCaFile) > 0 {
data, err := ioutil.ReadFile(cfg.SSLCaFile)
if err != nil {
return err
}
dialect += "&ssl=true"
roots := x509.NewCertPool()
roots.AppendCertsFromPEM(data)
clientOptions = options.Client().ApplyURI(dialect).SetTLSConfig(&tls.Config{
RootCAs: roots,
//InsecureSkipVerify: true,
}).SetRetryWrites(false)
} else {
dialect += "&ssl=false"
clientOptions = options.Client().ApplyURI(dialect).SetRetryWrites(false)
}
monitor := &event.CommandMonitor{
Started: func(ctx context.Context, startedEvent *event.CommandStartedEvent) {
log.Infof("mongoDB Command started %v %v", startedEvent.CommandName, startedEvent.Command.String())
},
Failed: func(ctx context.Context, failedEvent *event.CommandFailedEvent) {
log.Errorf("mongoDB Command error %v %v", failedEvent.CommandName, failedEvent.Failure)
},
}
clientOptions.SetMonitor(monitor)
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
return err
}
err = client.Ping(context.Background(), nil)
if err != nil {
return err
}
MDB = client
DefaultDB = MDB.Database("ecosmos")
ChatDB = MDB.Database("ecosmos_chat")
return nil
}
func Close() error {
if MDB != nil {
return MDB.Disconnect(context.Background())
}
return nil
}