165 lines
4.1 KiB
Go
165 lines
4.1 KiB
Go
package common
|
||
|
||
import (
|
||
"crypto/md5"
|
||
"encoding/hex"
|
||
"io"
|
||
"math/rand"
|
||
"os"
|
||
"regexp"
|
||
|
||
"encoding/json"
|
||
"math"
|
||
"mongo.games.com/goserver/core/netlib"
|
||
"mongo.games.com/goserver/srvlib"
|
||
)
|
||
|
||
const (
|
||
RankServerType = 15
|
||
)
|
||
|
||
var seed int64 = 1
|
||
|
||
func GetSelfSrvType() int {
|
||
return netlib.Config.SrvInfo.Type
|
||
}
|
||
|
||
func GetSelfSrvId() int {
|
||
return netlib.Config.SrvInfo.Id
|
||
}
|
||
|
||
func GetSelfAreaId() int {
|
||
return netlib.Config.SrvInfo.AreaID
|
||
}
|
||
|
||
func GetAccountSrvId() int {
|
||
return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.AccountServerType)
|
||
}
|
||
|
||
func GetGameSrvId() int {
|
||
return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.GameServerType)
|
||
}
|
||
func GetGameSrvIds() []int {
|
||
return srvlib.ServerSessionMgrSington.GetServerIds(GetSelfAreaId(), srvlib.GameServerType)
|
||
}
|
||
func GetWorldSrvId() int {
|
||
return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.WorldServerType)
|
||
}
|
||
|
||
func GetRankSrvId() int {
|
||
return srvlib.ServerSessionMgrSington.GetServerId(GetSelfAreaId(), srvlib.RankServerType)
|
||
}
|
||
|
||
func GetAppId() string {
|
||
return Config.AppId
|
||
}
|
||
|
||
func GetClientSessionId(s *netlib.Session) srvlib.SessionId {
|
||
param := s.GetAttribute(srvlib.SessionAttributeClientSession)
|
||
if sid, ok := param.(srvlib.SessionId); ok {
|
||
return sid
|
||
}
|
||
return srvlib.SessionId(0)
|
||
}
|
||
|
||
func GetRandInt(max int) int {
|
||
seed++
|
||
rand.Seed(seed)
|
||
return rand.Intn(max)
|
||
}
|
||
|
||
func Md5String(str string) string {
|
||
h := md5.New()
|
||
io.WriteString(h, str)
|
||
return hex.EncodeToString(h.Sum(nil))
|
||
}
|
||
|
||
func MakeMd5String(strs ...string) string {
|
||
buff := md5.New()
|
||
for _, value := range strs {
|
||
io.WriteString(buff, value)
|
||
}
|
||
return hex.EncodeToString(buff.Sum(nil))
|
||
}
|
||
|
||
func SetIntegerBit(num int32, index int32) int32 {
|
||
return num | (1 << uint(index-1))
|
||
}
|
||
|
||
func GetIntegerBit(num int32, index int32) bool {
|
||
if num&(1<<uint(index-1)) > 0 {
|
||
return true
|
||
} else {
|
||
return false
|
||
}
|
||
}
|
||
|
||
// 校验身份证是否合法
|
||
var REGEXP_IPRule, _ = regexp.Compile(`^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$`)
|
||
var ClubNameRule, _ = regexp.Compile("^[\u4e00-\u9fa5a-zA-Z-z0-9]+$")
|
||
|
||
func IsValidIP(Ip string) bool {
|
||
const UNKNOWIP = "0.0.0.0"
|
||
if Ip == "" || Ip == UNKNOWIP {
|
||
return false
|
||
}
|
||
if !REGEXP_IPRule.MatchString(Ip) {
|
||
return false
|
||
}
|
||
return true
|
||
}
|
||
|
||
func JsonToStr(v interface{}) string {
|
||
buff, _ := json.Marshal(v)
|
||
return string(buff)
|
||
}
|
||
|
||
func PathExists(path string) (bool, error) {
|
||
_, err := os.Stat(path)
|
||
if err == nil {
|
||
return true, nil
|
||
}
|
||
if os.IsNotExist(err) {
|
||
return false, nil
|
||
}
|
||
return false, err
|
||
}
|
||
|
||
func MinI64(l int64, r int64) int64 {
|
||
if l < r {
|
||
return l
|
||
} else {
|
||
return r
|
||
}
|
||
}
|
||
|
||
func AbsI64(l int64) int64 {
|
||
if l >= 0 {
|
||
return l
|
||
} else {
|
||
return -l
|
||
}
|
||
}
|
||
|
||
// 如果结果为负,说明是玩家亏钱,结果为正,玩家赢钱。
|
||
// 图像上是一个分段函数,绝对值极值为1
|
||
func GetWinLossRate(win int64, loss int64) float64 {
|
||
ret := float64(0)
|
||
|
||
if win > loss {
|
||
ret = float64(loss) / float64(win)
|
||
} else {
|
||
ret = -float64(win) / float64(loss)
|
||
}
|
||
|
||
return ret
|
||
}
|
||
|
||
// 得到一个初段慢,高段变快数
|
||
func GetSoftMaxNum(cur float64, maxValue float64) float64 {
|
||
if cur > maxValue {
|
||
return maxValue
|
||
}
|
||
return cur * math.Sin((cur/maxValue)*math.Pi/2)
|
||
}
|