Compare commits
No commits in common. "5c38610b55efeaebfe3a633fd36f88321962127f" and "e5378e46f948498caf0f3fbaa94d1773e1e67f06" have entirely different histories.
5c38610b55
...
e5378e46f9
|
@ -133,12 +133,10 @@ type PlayerLoginEvent struct {
|
||||||
IsNew int32 //是否是新用户,1是 0否
|
IsNew int32 //是否是新用户,1是 0否
|
||||||
DeviceId string //设备id
|
DeviceId string //设备id
|
||||||
ChannelId string //渠道id
|
ChannelId string //渠道id
|
||||||
AppChannel string //包渠道
|
|
||||||
ClientVer int32 // 客户端版本
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreatePlayerLoginEvent(snid int32, channel, promoter, platform, city, os, ip string, createTime,
|
func CreatePlayerLoginEvent(snid int32, channel, promoter, platform, city, os, ip string, createTime,
|
||||||
upgradeTime time.Time, isBindPhone int32, telephonePromoter int32, deviceId, channelId, appChannel string, clientVer int32) *PlayerLoginEvent {
|
upgradeTime time.Time, isBindPhone int32, telephonePromoter int32, deviceId, channelId string) *PlayerLoginEvent {
|
||||||
isNew := int32(0)
|
isNew := int32(0)
|
||||||
if createTime.Local().YearDay() == time.Now().Local().YearDay() && createTime.Local().Year() == time.Now().Local().Year() {
|
if createTime.Local().YearDay() == time.Now().Local().YearDay() && createTime.Local().Year() == time.Now().Local().Year() {
|
||||||
isNew = 1
|
isNew = 1
|
||||||
|
@ -160,11 +158,25 @@ func CreatePlayerLoginEvent(snid int32, channel, promoter, platform, city, os, i
|
||||||
IsNew: isNew,
|
IsNew: isNew,
|
||||||
DeviceId: deviceId,
|
DeviceId: deviceId,
|
||||||
ChannelId: channelId,
|
ChannelId: channelId,
|
||||||
AppChannel: appChannel,
|
|
||||||
ClientVer: clientVer,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MarshalPlayerLoginEvent(source, snid int32, channel, promoter, platform, city, os, ip string,
|
||||||
|
createTime, upgradeTime time.Time, isBindPhone int32, telephonePromoter int32, deviceId, channelId string) (data string, err error) {
|
||||||
|
raw := &RabbitMQDataRaw{
|
||||||
|
Source: source,
|
||||||
|
Data: CreatePlayerLoginEvent(snid, channel, promoter, platform, city, os, ip, createTime,
|
||||||
|
upgradeTime, isBindPhone, telephonePromoter, deviceId, channelId),
|
||||||
|
}
|
||||||
|
|
||||||
|
d, e := json.Marshal(raw)
|
||||||
|
if e == nil {
|
||||||
|
data = string(d[:])
|
||||||
|
}
|
||||||
|
err = e
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 用户升级账号
|
// 用户升级账号
|
||||||
type PlayerBindPhoneEvent struct {
|
type PlayerBindPhoneEvent struct {
|
||||||
SnId int32 //用户ID
|
SnId int32 //用户ID
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
package mongo
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"mongo.games.com/game/mongo/internal"
|
|
||||||
"mongo.games.com/goserver/core/logger"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Config = internal.Config
|
|
||||||
type DatabaseConfig = internal.DatabaseConfig
|
|
||||||
type Collection = internal.Collection
|
|
||||||
|
|
||||||
var _manager *internal.Manager
|
|
||||||
var _conf *internal.Config
|
|
||||||
|
|
||||||
// GetConfig 获取配置
|
|
||||||
func GetConfig() *Config {
|
|
||||||
return _conf
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init 初始化
|
|
||||||
func Init(conf *Config) error {
|
|
||||||
_conf = conf
|
|
||||||
_manager = internal.NewManager(_conf)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Restart 重启
|
|
||||||
func Restart() {
|
|
||||||
if _manager == nil {
|
|
||||||
logger.Logger.Errorf("mongo manager is nil, please call Init() first")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_manager.Restart(_conf)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetGlobalCollection 获取全局库
|
|
||||||
// database: 数据库名称
|
|
||||||
// collection: 集合名称
|
|
||||||
func GetGlobalCollection(database, collection string) (*Collection, error) {
|
|
||||||
if _manager == nil {
|
|
||||||
return nil, errors.New("mongo manager is nil, please call Init() first")
|
|
||||||
}
|
|
||||||
|
|
||||||
return _manager.GetCollection("global", database, collection)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetCollection 获取平台库
|
|
||||||
// platform: 平台id
|
|
||||||
// database: 数据库名称
|
|
||||||
// collection: 集合名称
|
|
||||||
func GetCollection(platform, database, collection string) (*Collection, error) {
|
|
||||||
if _manager == nil {
|
|
||||||
return nil, errors.New("mongo manager is nil, please call Init() first")
|
|
||||||
}
|
|
||||||
|
|
||||||
return _manager.GetCollection(platform, database, collection)
|
|
||||||
}
|
|
|
@ -1,185 +0,0 @@
|
||||||
package internal
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
|
||||||
"mongo.games.com/goserver/core/logger"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
Global map[string]*DatabaseConfig
|
|
||||||
Platforms map[string]map[string]*DatabaseConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
type DatabaseConfig struct {
|
|
||||||
HostName string // 主机地址
|
|
||||||
HostPort int32 // 端口
|
|
||||||
Database string // 数据库名
|
|
||||||
Username string // 用户名
|
|
||||||
Password string // 密码
|
|
||||||
Options string // 配置
|
|
||||||
}
|
|
||||||
|
|
||||||
type Collection struct {
|
|
||||||
Database *Database
|
|
||||||
*mongo.Collection
|
|
||||||
}
|
|
||||||
|
|
||||||
type Database struct {
|
|
||||||
*DatabaseConfig
|
|
||||||
Client *mongo.Client
|
|
||||||
Database *mongo.Database
|
|
||||||
Collection sync.Map
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Database) Connect() error {
|
|
||||||
if d.DatabaseConfig == nil {
|
|
||||||
err := fmt.Errorf("mongo Connect error, DatabaseConifg not found")
|
|
||||||
logger.Logger.Error(err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
login := ""
|
|
||||||
if d.DatabaseConfig.Username != "" {
|
|
||||||
login = d.DatabaseConfig.Username + ":" + d.DatabaseConfig.Password + "@"
|
|
||||||
}
|
|
||||||
host := d.DatabaseConfig.HostName
|
|
||||||
if d.DatabaseConfig.HostName == "" {
|
|
||||||
host = "127.0.0.1"
|
|
||||||
}
|
|
||||||
port := d.DatabaseConfig.HostPort
|
|
||||||
if d.DatabaseConfig.HostPort == 0 {
|
|
||||||
port = 27017
|
|
||||||
}
|
|
||||||
myOptions := d.DatabaseConfig.Options
|
|
||||||
if myOptions != "" {
|
|
||||||
myOptions = "?" + myOptions
|
|
||||||
}
|
|
||||||
|
|
||||||
s := fmt.Sprintf("mongodb://%s%s:%d/admin%s", login, host, port, myOptions)
|
|
||||||
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(s))
|
|
||||||
if err != nil {
|
|
||||||
logger.Logger.Errorf("mongo Connect %v error: %v config:%+v", s, err, *d.DatabaseConfig)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
logger.Logger.Tracef("mongo connect success %+v", *d.DatabaseConfig)
|
|
||||||
d.Client = client
|
|
||||||
d.Database = client.Database(d.DatabaseConfig.Database)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Database) GetCollection(name string) (*Collection, error) {
|
|
||||||
if d.Database == nil {
|
|
||||||
err := fmt.Errorf("mongo GetCollection error, collection:%v, database is nil", name)
|
|
||||||
logger.Logger.Error(err)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
v, ok := d.Collection.Load(name)
|
|
||||||
if !ok {
|
|
||||||
v = &Collection{
|
|
||||||
Database: d,
|
|
||||||
Collection: d.Database.Collection(name),
|
|
||||||
}
|
|
||||||
d.Collection.Store(name, v)
|
|
||||||
}
|
|
||||||
c, _ := v.(*Collection)
|
|
||||||
return c, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type Manager struct {
|
|
||||||
conf *Config
|
|
||||||
global *sync.Map // 内部库名称:Database
|
|
||||||
platforms *sync.Map // 平台id:内部库名称:Database
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) GetCollection(key, database, collection string) (*Collection, error) {
|
|
||||||
switch key {
|
|
||||||
case "global":
|
|
||||||
v, ok := m.global.Load(database)
|
|
||||||
if !ok {
|
|
||||||
db := &Database{
|
|
||||||
DatabaseConfig: m.conf.Global[database],
|
|
||||||
Collection: sync.Map{},
|
|
||||||
}
|
|
||||||
if err := db.Connect(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
v = db
|
|
||||||
m.global.Store(database, v)
|
|
||||||
}
|
|
||||||
d, _ := v.(*Database)
|
|
||||||
return d.GetCollection(collection)
|
|
||||||
|
|
||||||
default:
|
|
||||||
var mp *sync.Map
|
|
||||||
v, ok := m.platforms.Load(key) // 平台id
|
|
||||||
if !ok {
|
|
||||||
mp = new(sync.Map)
|
|
||||||
m.platforms.Store(key, mp)
|
|
||||||
} else {
|
|
||||||
mp = v.(*sync.Map)
|
|
||||||
}
|
|
||||||
v, ok = mp.Load(database)
|
|
||||||
if !ok {
|
|
||||||
db := &Database{
|
|
||||||
DatabaseConfig: m.conf.Platforms[key][database],
|
|
||||||
Collection: sync.Map{},
|
|
||||||
}
|
|
||||||
if err := db.Connect(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
v = db
|
|
||||||
mp.Store(database, v)
|
|
||||||
}
|
|
||||||
d, _ := v.(*Database)
|
|
||||||
return d.GetCollection(collection)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) Restart(conf *Config) {
|
|
||||||
logger.Logger.Infof("mongo manager restart...")
|
|
||||||
global := m.global
|
|
||||||
platforms := m.platforms
|
|
||||||
time.AfterFunc(time.Minute, func() {
|
|
||||||
logger.Logger.Infof("mongo manager restart close...")
|
|
||||||
global.Range(func(key, value any) bool {
|
|
||||||
if v, ok := value.(*Database); ok {
|
|
||||||
v.Client.Disconnect(nil)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
|
|
||||||
platforms.Range(func(key, value any) bool {
|
|
||||||
if v, ok := value.(*sync.Map); ok {
|
|
||||||
v.Range(func(key, value any) bool {
|
|
||||||
if v, ok := value.(*Database); ok {
|
|
||||||
v.Client.Disconnect(nil)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
m.conf = conf
|
|
||||||
m.global = &sync.Map{}
|
|
||||||
m.platforms = &sync.Map{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Manager) GetConfig() *Config {
|
|
||||||
return m.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewManager(conf *Config) *Manager {
|
|
||||||
return &Manager{
|
|
||||||
conf: conf,
|
|
||||||
global: &sync.Map{},
|
|
||||||
platforms: &sync.Map{},
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1983,17 +1983,17 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 客户端升级奖励
|
// 老版本升级
|
||||||
clientUpgradeConfig := PlatformMgrSingleton.GetConfig(p.Platform).ClientUpgrade
|
clientUpgradeConfig := PlatformMgrSingleton.GetConfig(p.Platform).ClientUpgrade
|
||||||
if clientUpgradeConfig != nil && clientUpgradeConfig.GetOn() == common.On &&
|
if clientUpgradeConfig != nil && clientUpgradeConfig.GetOn() == common.On &&
|
||||||
(len(model.GameParamData.ClientVersionChannel) == 0 || slices.Contains(model.GameParamData.ClientVersionChannel, p.LastChannel)) {
|
(len(model.GameParamData.ClientVersionChannel) == 0 || slices.Contains(model.GameParamData.ClientVersionChannel, p.LastChannel)) {
|
||||||
if p.ClientVer < model.GameParamData.ClientVersion && cspl.GetClientVer() == model.GameParamData.ClientVersion {
|
if p.ClientVer < model.GameParamData.ClientVersion {
|
||||||
|
if cspl.GetClientVer() == model.GameParamData.ClientVersion {
|
||||||
|
// 升级了
|
||||||
|
p.ClientVer = model.GameParamData.ClientVersion
|
||||||
AddMailClientUpgrade(p.SnId, clientUpgradeConfig.GetReward())
|
AddMailClientUpgrade(p.SnId, clientUpgradeConfig.GetReward())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 客户端升级
|
|
||||||
if p.ClientVer < cspl.GetClientVer() && cspl.GetClientVer() <= model.GameParamData.ClientVersion {
|
|
||||||
p.ClientVer = cspl.GetClientVer()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2940,7 +2940,7 @@ func (this *Player) ReportLoginEvent() {
|
||||||
}
|
}
|
||||||
mq.Write(model.GenerateLogin(model.CreatePlayerLoginEvent(this.SnId,
|
mq.Write(model.GenerateLogin(model.CreatePlayerLoginEvent(this.SnId,
|
||||||
this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.DeviceOS, this.Ip,
|
this.Channel, this.BeUnderAgentCode, this.Platform, this.City, this.DeviceOS, this.Ip,
|
||||||
this.CreateTime, this.UpgradeTime, isBindPhone, this.TelephonePromoter, this.DeviceId, this.ChannelId, this.AppChannel, this.ClientVer)))
|
this.CreateTime, this.UpgradeTime, isBindPhone, this.TelephonePromoter, this.DeviceId, this.ChannelId)))
|
||||||
//登录通知
|
//登录通知
|
||||||
//ActMonitorMgrSington.SendActMonitorEvent(ActState_Login, this.SnId, this.Name, this.Platform,
|
//ActMonitorMgrSington.SendActMonitorEvent(ActState_Login, this.SnId, this.Name, this.Platform,
|
||||||
// 0, 0, "", 0)
|
// 0, 0, "", 0)
|
||||||
|
|
Loading…
Reference in New Issue