| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package db
- import (
- "errors"
- cherryApp "f1-game/internal/cherry_app"
- dbFacade "f1-game/internal/component/db/facade"
- nameDB "f1-game/internal/name/db"
- ctime "github.com/cherry-game/cherry/extend/time"
- clog "github.com/cherry-game/cherry/logger"
- "go.mongodb.org/mongo-driver/v2/bson"
- "go.mongodb.org/mongo-driver/v2/mongo"
- )
- type (
- // NodeTable 节点信息表,记录当前节点全局信息
- NodeTable struct {
- NodeID string `bson:"NodeID,omitempty"`
- FirstStartTime int64 `bson:"FirstStartTime,omitempty"`
- LastStartTime int64 `bson:"LastStartTime,omitempty"`
- dbFacade.TableBase `bson:",inline"`
- }
- )
- func (p *NodeTable) TableName() string {
- return nameDB.Table_Node
- }
- func (p *NodeTable) PrimaryValue() any {
- return p.NodeID
- }
- func (p *NodeTable) CheckField() {
- }
- func (p *NodeTable) Save2Queue() {
- save2Queue(p)
- }
- // IsFirstTime 是否为首次开服
- func (p *NodeTable) IsFirstTime() bool {
- return p.FirstStartTime > 0 && p.FirstStartTime == p.LastStartTime
- }
- func NodeIsFirstTime() bool {
- nodeTable, _ := GetNodeTable(cherryApp.NodeID())
- return nodeTable.IsFirstTime()
- }
- func GetNodeTable(nodeID string) (*NodeTable, bool) {
- if val, ok := nodeTableCache.GetIfPresent(nodeID); ok {
- return val.(*NodeTable), true
- }
- nodeTable, found := GetNodeTableFromDB(nodeID)
- nodeTableCache.Put(nodeID, nodeTable)
- return nodeTable, found
- }
- func nodeCheck() {
- nodeTable, found := GetNodeTable(cherryApp.NodeID())
- if !found {
- now := ctime.Now().ToMillisecond()
- nodeTable.FirstStartTime = now
- nodeTable.LastStartTime = now
- } else {
- nodeTable.LastStartTime = ctime.Now().ToMillisecond()
- }
- nodeTable.Save2Queue()
- }
- func GetNodeTableFromDB(nodeID string) (*NodeTable, bool) {
- table := newNodeTable(nodeID)
- filter := bson.M{
- nameDB.Field_NodeID: table.NodeID,
- }
- err := dbComponent.FindOne(table, filter)
- if err != nil {
- if errors.Is(err, mongo.ErrNoDocuments) {
- clog.Warnf("[nodeID = %s] not found, create new one", nodeID)
- return table, false
- }
- clog.Errorf("[nodeID = %s] db error = %v", nodeID, err)
- return table, false
- }
- table.CheckField()
- return table, true
- }
- func newNodeTable(nodeID string) *NodeTable {
- return &NodeTable{
- NodeID: nodeID,
- FirstStartTime: 0,
- LastStartTime: 0,
- }
- }
|