356 lines
11 KiB
Go
356 lines
11 KiB
Go
package static
|
|
|
|
//func getAccountTel(platform string, id int) (string, error) {
|
|
// acc := &mongomodel.Account{}
|
|
// cc, err := mymongo.GetUserCollection(platform, mongomodel.UserAccount)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("get collection %s error %v", mongomodel.UserAccount, err)
|
|
// return "", err
|
|
// }
|
|
// dd := cc.FindOne(context.TODO(), bson.M{"snid": id}, options.FindOne().SetProjection(bson.M{"tel": 1}))
|
|
// err = dd.Err()
|
|
// if err != nil {
|
|
// if errors.Is(err, mongo.ErrNoDocuments) {
|
|
// logger.Logger.Tracef("getAccountTel %v not found in user_account", id)
|
|
// return "", nil
|
|
// }
|
|
// logger.Logger.Errorf("getAccountTel %v get user_account err: %v", id, err)
|
|
// return "", err
|
|
// }
|
|
// if err := dd.Decode(acc); err != nil {
|
|
// logger.Logger.Errorf("getAccountTel %v decode user_account err: %v", id, err)
|
|
// return "", err
|
|
// }
|
|
// return acc.Tel, nil
|
|
//}
|
|
//
|
|
//// 游戏结束离开
|
|
//func checkGameOver(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) {
|
|
// // 最早的一条掉线记录并且是游戏结束离开
|
|
// a := &mongomodel.LoginLog{}
|
|
// c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err)
|
|
// return false, err
|
|
// }
|
|
// d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop, "gameid": 0, "lastgameid": bson.D{{"$gt", 0}}},
|
|
// options.FindOne().SetSort(bson.D{{"time", 1}}))
|
|
// err = d.Err()
|
|
// if err != nil {
|
|
// if errors.Is(err, mongo.ErrNoDocuments) {
|
|
// logger.Logger.Tracef("checkGameOver %v not found in log_login", id)
|
|
// return false, nil
|
|
// }
|
|
// logger.Logger.Errorf("checkGameOver %v get log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
// if err := d.Decode(a); err != nil {
|
|
// logger.Logger.Errorf("checkGameOver %v decode log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// // account tel
|
|
// tel, err := getAccountTel(platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Warnf("get account tel %v err: %v", id, err)
|
|
// }
|
|
//
|
|
// update := &mysqlmodel.UserLogin{
|
|
// //OfflineTs: int(a.Ts),
|
|
// OfflineTime: a.Time,
|
|
// OutType: mysqlmodel.OutTypeGameOver,
|
|
// GameID: a.LastGameID,
|
|
// Tel: tel,
|
|
// DeviceName: a.DeviceName,
|
|
// AppVersion: a.AppVersion,
|
|
// BuildVersion: a.BuildVersion,
|
|
// AppChannel: a.AppChannel,
|
|
// ChannelId: a.ChannelId,
|
|
// }
|
|
//
|
|
// if err := db.Model(login).Select(
|
|
// "OfflineTime", "OutType", "GameID", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel",
|
|
// ).Updates(update).Error; err != nil {
|
|
// logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// return true, nil
|
|
//}
|
|
//
|
|
//// 游戏中离开
|
|
//func checkGaming(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) {
|
|
// // 最早的一条掉线记录并且是游戏中掉线
|
|
// a := &mongomodel.LoginLog{}
|
|
// c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err)
|
|
// return false, err
|
|
// }
|
|
// d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop, "gameid": bson.D{{"$gt", 0}}},
|
|
// options.FindOne().SetSort(bson.D{{"time", 1}}))
|
|
// err = d.Err()
|
|
// if err != nil {
|
|
// if errors.Is(err, mongo.ErrNoDocuments) {
|
|
// logger.Logger.Tracef("checkGaming %v not found in log_login", id)
|
|
// return false, nil
|
|
// }
|
|
// logger.Logger.Errorf("checkGaming %v get log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
// if err := d.Decode(a); err != nil {
|
|
// logger.Logger.Errorf("checkGaming %v decode log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// // account tel
|
|
// tel, err := getAccountTel(platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Warnf("get account tel %v err: %v", id, err)
|
|
// }
|
|
//
|
|
// update := &mysqlmodel.UserLogin{
|
|
// //OfflineTs: int(a.Ts),
|
|
// OfflineTime: a.Time,
|
|
// OutType: mysqlmodel.OutTypeGaming,
|
|
// GameID: a.GameId,
|
|
// Tel: tel,
|
|
// DeviceName: a.DeviceName,
|
|
// AppVersion: a.AppVersion,
|
|
// BuildVersion: a.BuildVersion,
|
|
// AppChannel: a.AppChannel,
|
|
// ChannelId: a.ChannelId,
|
|
// }
|
|
//
|
|
// if err := db.Model(login).Select(
|
|
// "OfflineTime", "OutType", "GameID", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel",
|
|
// ).Updates(update).Error; err != nil {
|
|
// logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// return true, nil
|
|
//}
|
|
//
|
|
//// 登录后离开
|
|
//func checkLogin(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) {
|
|
// // 最早的一条掉线记录
|
|
// a := &mongomodel.LoginLog{}
|
|
// c, err := mymongo.GetLogCollection(platform, mongomodel.LogLogin)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("get collection %s error %v", mongomodel.LogLogin, err)
|
|
// return false, err
|
|
// }
|
|
// d := c.FindOne(context.TODO(), bson.M{"snid": id, "logtype": mongomodel.LogTypeDrop}, options.FindOne().SetSort(bson.D{{"time", 1}}))
|
|
// err = d.Err()
|
|
// if err != nil {
|
|
// if errors.Is(err, mongo.ErrNoDocuments) {
|
|
// logger.Logger.Tracef("checkLogin %v not found in log_login", id)
|
|
// return false, nil
|
|
// }
|
|
// logger.Logger.Errorf("checkLogin %v get log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
// if err := d.Decode(a); err != nil {
|
|
// logger.Logger.Errorf("checkLogin %v decode log_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// // account tel
|
|
// tel, err := getAccountTel(platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Warnf("get account tel %v err: %v", id, err)
|
|
// }
|
|
//
|
|
// update := &mysqlmodel.UserLogin{
|
|
// //OfflineTs: int(a.Ts),
|
|
// OfflineTime: a.Time,
|
|
// OutType: mysqlmodel.OutTypeLogin,
|
|
// Tel: tel,
|
|
// DeviceName: a.DeviceName,
|
|
// AppVersion: a.AppVersion,
|
|
// BuildVersion: a.BuildVersion,
|
|
// AppChannel: a.AppChannel,
|
|
// ChannelId: a.ChannelId,
|
|
// }
|
|
//
|
|
// if err := db.Model(login).Select(
|
|
// "OfflineTime", "OutType", "DeviceName", "AppVersion", "BuildVersion", "AppChannel", "Tel",
|
|
// ).Updates(update).Error; err != nil {
|
|
// logger.Logger.Errorf("checkLogin %v update user_login err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// return true, nil
|
|
//}
|
|
//
|
|
//// 注册后离开
|
|
//func checkRegister(db *mymysql.Database, login *mysqlmodel.UserLogin, platform string, id int) (bool, error) {
|
|
// a := &mongomodel.Account{}
|
|
// c, err := mymongo.GetUserCollection(platform, mongomodel.UserAccount)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("get collection %s error %v", mongomodel.UserAccount, err)
|
|
// return false, err
|
|
// }
|
|
// d := c.FindOne(context.TODO(), bson.M{"snid": id})
|
|
// err = d.Err()
|
|
// if err != nil {
|
|
// if errors.Is(err, mongo.ErrNoDocuments) {
|
|
// logger.Logger.Warnf("checkRegister %v not found in user_account", id)
|
|
// return false, nil
|
|
// }
|
|
// logger.Logger.Errorf("checkRegister %v get user_account err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
// if err := d.Decode(a); err != nil {
|
|
// logger.Logger.Errorf("checkRegister %v decode user_account err: %v", id, err)
|
|
// return false, err
|
|
// }
|
|
//
|
|
// // account tel
|
|
// tel, err := getAccountTel(platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Warnf("get account tel %v err: %v", id, err)
|
|
// }
|
|
//
|
|
// login.Snid = id
|
|
// //login.OnlineTs = int(a.RegisterTs)
|
|
// login.OnlineTime = a.RegisteTime
|
|
// //login.OfflineTs = int(a.RegisterTs)
|
|
// login.OfflineTime = a.RegisteTime
|
|
// login.OutType = mysqlmodel.OutTypRegister
|
|
// login.Tel = tel
|
|
// login.DeviceName = a.DeviceName
|
|
// login.AppVersion = a.AppVersion
|
|
// login.BuildVersion = a.BuildVersion
|
|
// login.AppChannel = a.AppChannel
|
|
// login.ChannelId = a.ChannelId
|
|
//
|
|
// if err := db.Create(login).Error; err != nil {
|
|
// logger.Logger.Errorf("checkRegister create err: %v", err)
|
|
// return false, err
|
|
// }
|
|
// return true, nil
|
|
//}
|
|
|
|
// UserLogin 玩家跳出统计
|
|
//func UserLogin(platform string, ids []*mysqlmodel.UserID) error {
|
|
// f := func(id int) error {
|
|
// // 玩家是否已经统计结束,已经是游戏结束状态
|
|
// login := &mysqlmodel.UserLogin{}
|
|
// db, err := mymysql.GetDatabase(platform)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin get db err: %v", err)
|
|
// return err
|
|
// }
|
|
// if err = db.Where("snid = ?", id).Find(login).Error; err != nil {
|
|
// logger.Logger.Errorf("UserLogin find %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
//
|
|
// switch login.OutType {
|
|
// case mysqlmodel.OutTypeGameOver:
|
|
// return nil
|
|
//
|
|
// case mysqlmodel.OutTypeGaming:
|
|
// _, err := checkGameOver(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// return nil
|
|
//
|
|
// case mysqlmodel.OutTypeLogin:
|
|
// ret, err := checkGameOver(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// ret, err = checkGaming(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
//
|
|
// case mysqlmodel.OutTypRegister:
|
|
// ret, err := checkGameOver(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// ret, err = checkGaming(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// ret, err = checkLogin(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkLogin %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
//
|
|
// default:
|
|
// ret, err := checkRegister(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkRegister %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if !ret {
|
|
// logger.Logger.Warnf("UserLogin not found user_account checkRegister %v err: %v", id, err)
|
|
// return nil
|
|
// }
|
|
//
|
|
// ret, err = checkGameOver(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGameOver %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// ret, err = checkGaming(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkGaming %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// ret, err = checkLogin(db, login, platform, id)
|
|
// if err != nil {
|
|
// logger.Logger.Errorf("UserLogin checkLogin %v err: %v", id, err)
|
|
// return err
|
|
// }
|
|
// if ret {
|
|
// return nil
|
|
// }
|
|
// return nil
|
|
// }
|
|
//
|
|
// return nil
|
|
// }
|
|
//
|
|
// for _, v := range ids {
|
|
// if err := f(v.Snid); err != nil {
|
|
// return err
|
|
// }
|
|
// }
|
|
//
|
|
// return nil
|
|
//}
|