package common import ( "fmt" "server/util" "strconv" "strings" ) // 平台登录方式 const ( AccountTypeGuest = iota AccountTypePhone AccountTypeFacebook AccountTypeGoogleplay AccountTypeEmail AccountTypeAccount AccountTypeRobot = 100 ) // 账号状态 const ( AccountStatus = iota AccountStatusNormal // 正常 AccountStatusLimit // 封禁 AccountStatusAll ) // 对账号进行操作 const ( OptPlayerType = iota OptPlayerTypeKick // 踢出玩家 OptPlayerTypeDisconnect // 操作玩家断线 OptPlayerTypeAll ) const ( LanguageEN = iota + 1 LanguageHindi ) const ( NewUser = iota + 1 // 新用户登录 OldUser // 老用户登录 ) const ( DecimalDigits = 100000000 // 计算时精确到小数点后8位 ) var ( DecimalCounts = 0 OneDay int64 = 24 * 60 * 60 // 一天的秒数 ) func init() { tmp := DecimalDigits for { if tmp <= 1 { break } tmp /= 10 DecimalCounts++ } } func CashFloat64ToInt64(value float64) int64 { negative := value < 0 // 将浮点数转换为字符串 text := fmt.Sprintf("%v", value) // 查找小数点位置 pointIndex := strings.Index(text, ".") var left, right string var big, small int64 if pointIndex != -1 { left = text[:pointIndex] // 去除小数点后面尾随的0 right = strings.TrimRight(text[pointIndex+1:], "0") } else { left = text } diff := len(right) - DecimalCounts if diff > 0 { right = right[:DecimalCounts] } else { for i := 0; i < -diff; i++ { right += "0" } } big, _ = strconv.ParseInt(left, 10, 64) small, _ = strconv.ParseInt(right, 10, 64) ret := util.Abs(big*DecimalDigits) + small if negative { return -ret } return ret } const ( DeviceType = iota DeviceTypeMobile DeviceTypePC DeviceTypeWebview DeviceTypeIOSH5 DeviceTypeMac DeviceTypePWA DeviceTypeAll ) func IsPC(t int) bool { return t == DeviceTypePC } func GetAccountPre(t int) string { switch t { case AccountTypeGuest: return "guest" case AccountTypePhone: return "phone" case AccountTypeFacebook: return "fb" case AccountTypeGoogleplay: return "gp" case AccountTypeEmail: return "email" case AccountTypeAccount: return "account" case AccountTypeRobot: return "robot" } return "" } // 渠道号分区 var ( ChannelRegionGoogle = []int{2, 10000} ChannelRegionVivo = []int{10001, 11000} ) const ( BrocastIDAll = iota // 全服广播 BrocastIDWithdraw // tx事件 ) // 平台号 const ( PlatformIDGoogle = iota + 1 PlatformIDVivo PlatformIDAll ) func GetRegionByPlatformID(id int) []int { switch id { case PlatformIDGoogle: return ChannelRegionGoogle case PlatformIDVivo: return ChannelRegionVivo default: return nil } } type AdjustEventType int // adjust事件顺序 const ( AdjustEventFinishLoad AdjustEventType = iota // 加载完成 AdjustEventFirstPage // 首屏加载 AdjustEventClickDemo // 点击游戏demo AdjustEventClickPlay // 点击游戏play AdjustEventNewPay // 新用户付费 AdjustEventAllPay // 所有用户付费 AdjustEventNewPlayer // 注册完成 ) const ( ADZero = iota ADFB ADKwai ADJust ADAll ) // Channel 渠道表 // GameControlm 游戏控制,0关闭,1开启 type Channel struct { ID uint `gorm:"primarykey"` IgnoreOrganic int `gorm:"column:ignore_organic;type:tinyint(4);default:1;comment:是否屏蔽自然量 1不屏蔽 2屏蔽" json:"ignore_organic"` AdjustEventID string `gorm:"column:adjust_eventid;type:varchar(256);not null;comment:adjust事件id,按顺序隔开" json:"adjust_eventid"` AdjustAppToken string `gorm:"column:adjust_app_token;type:varchar(256);not null;comment:adjust应用token" json:"adjust_app_token"` AdjustAuth string `gorm:"column:adjust_auth;type:varchar(256);not null;comment:adjust验证码" json:"adjust_auth"` Name string `gorm:"column:name;type:varchar(32);not null;comment:渠道" json:"name"` PackName string `gorm:"column:pack_name;type:varchar(256);not null;comment:包名" json:"pack_name"` Version int `gorm:"column:version;type:int(11);not null;comment:审核版本号" json:"version"` MainVersion int `gorm:"column:main_version;type:int(11);not null;comment:正式服版本号" json:"main_version"` ChannelID int `gorm:"column:channel_id;type:bigint(20);uniqueIndex:channel_id;comment:渠道id" json:"channel_id"` PlatformID int `gorm:"column:platform_id;type:int(11);comment:平台id,1 googleplay 2 vivo" json:"platform_id"` IsHot int `gorm:"column:ishot;type:tinyint(4);default:1;comment:是否热更,1不热更,2热更" json:"ishot"` URL string `gorm:"column:url;type:varchar(64);not null;default:'';comment:域名" json:"url"` Show int `gorm:"column:show;type:int(11);default:0;comment:是否打开,1不打开,2打开" json:"show"` FBPixelID string `gorm:"column:fb_pixelid;type:varchar(256);not null;comment:fb像素id" json:"fb_pixelid"` FBAccessToken string `gorm:"column:fb_accesstoken;type:varchar(256);not null;comment:fb验证码" json:"fb_accesstoken"` UP int `gorm:"column:up;type:int(11);default:0;comment:上级渠道" json:"up"` ADUpload int `gorm:"column:ad_upload;type:int(11);default:0;comment:上报事件的平台" json:"ad_upload"` } func (c *Channel) TableName() string { return "channel" } // ServerVersion 服务器版本表 // GameControlm 游戏控制,0关闭,1开启 type ServerVersion struct { ID uint `gorm:"primarykey"` ServerID int `gorm:"column:server_id;type:int(11);uniqueIndex:server_id;default:0;comment:服务器id" json:"server_id" redis:"server_id"` Version int `gorm:"column:version;type:int(11);default:0;comment:服务器最新版本" json:"version" redis:"version"` } func (c *ServerVersion) TableName() string { return "server_version" } func (c *Channel) GetAdjustEventID(e int) string { s := strings.Split(c.AdjustEventID, ",") if e > len(s)-1 { return "" } return s[e] } // 红点提示 const ( RedpointMail = iota + 1 // 邮件 ) // WhiteList 白名单 // ListType 名单类型 1白名单 2黑名单(当为0时,用作系统开关) // LimitType 限制类型 1ip限制 2设备限制(用作系统开关时 1开启 2关闭) // Content ip或者设备码 // Platform 平台类型 facebook 2 gooleplay 3 // Channel 渠道号 // Version 版本号 // CreateTime 创建时间 // Operator 操作人 // Powers 权限 // // 第1位控制 手机/游客/渠道 // 第2位控制 注册账号 // 第3位控制 绑定账号 // 第4位控制 账号充值 // 第5位控制 账号退出 // 第6位控制 游戏玩牌 // 第7位控制 版本热更 type WhiteList struct { ID string ListType int LimitType int Content string Platform int Channel int Version int Powers []int CreateTime int64 Operator string } var ( PowerMap = map[string]int{ "/account/phoneCode/login": 0, "/account/guestLogin": 0, "/account/gpLogin": 0, "/account/phoneCode/regist": 1, "/account/phoneCode/bind": 2, "/balance/recharge/do": 3, "/balance/withdraw/do": 4, "playCard": 5, // "/sys/hotUpdate": 6, } LimitMap = map[string]struct{}{ "/sys/hotUpdate": {}, } ) func IsLimitMap(path string) bool { _, ok := LimitMap[path] return ok } // PowerPass 鉴权 func (w *WhiteList) PowerPass(path string) bool { po, ok := PowerMap[path] if !ok { index := -1 for k, v := range PowerMap { if strings.Contains(path, k) { index = v break } } if index == -1 { return true } po = index } if po > len(w.Powers) { return false } power := w.Powers[po] if po == 0 { index := strings.LastIndex(path, "/") newStr := path[index:] switch newStr { case "/login": return power&4 == 4 case "/guestLogin": return power&2 == 2 case "/gpLogin": return power&1 == 1 default: return false } } return power == 1 } // ExamineList 审核人员列表 type ExamineList struct { Time int64 } // LoginRecord 玩家登录记录表 type LoginRecord struct { ID int `gorm:"primarykey"` FirstTime int64 `gorm:"column:first_time;default:0;type:bigint(20);comment:首次登录时间"` Time int64 `gorm:"column:time;default:0;type:bigint(20);unixIndex:ut;comment:最后登录时间"` UID int `gorm:"column:uid;not null;type:int(11);unixIndex:ut;comment:玩家id"` IP string `gorm:"column:ip;type:varchar(256);comment:玩家登录ip"` Date string `gorm:"column:date;type:varchar(64);default:'';comment:日期"` ChannelID int `gorm:"column:channel_id;type:bigint(20);default:0;comment:渠道id"` Status int `gorm:"column:status;type:int(11);comment:1是新用户,2是老用户"` Platform int `gorm:"column:platform;type:int(11);default:1;comment:最新登录平台"` IsRecharge int `gorm:"column:is_recharge;type:tinyint(4);default:1;comment:1未充值,2已充值"` } func (c *LoginRecord) TableName() string { return "login_record" } // RedisRealOnline 各场次实时在线 type RedisRealOnline struct { Total int // 总在线人数 New int // 新用户在线人数 } // IsShareChannel 是否是分享渠道 func IsShareChannel(cid int) bool { return cid > 10000 } // BlackList 黑名单 type BlackList struct { ID int `gorm:"primarykey"` Name string `gorm:"column:name;type:varchar(64);default:'';not null;uniqueIndex:black_all;comment:名字" json:"Name" web:"name"` Phone string `gorm:"column:phone;type:varchar(64);default:'';not null;uniqueIndex:black_all;comment:手机号" json:"Phone" web:"phone"` Email string `gorm:"column:email;type:varchar(64);default:'';not null;uniqueIndex:black_all;comment:email" json:"Email" web:"email"` PayAccount string `gorm:"column:pay_account;type:varchar(255);default:'';not null;uniqueIndex:black_all;comment:支付账号" json:"PayAccount" web:"pay_account"` DeviceID string `gorm:"column:deviceid;type:varchar(255);default:'';not null;uniqueIndex:black_all;comment:设备号" json:"DeviceID" web:"deviceid"` IP string `gorm:"column:ip;type:varchar(64);default:'';not null;uniqueIndex:black_all;comment:ip" json:"IP" web:"ip"` } func (c *BlackList) TableName() string { return "black_list" }