game_sync/common/esayfunc.go

173 lines
3.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 IDReg, _ = regexp.Compile(`(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)`)
var REGEXP_IPRule, _ = regexp.Compile(`^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$`)
var ClubNameRule, _ = regexp.Compile("^[\u4e00-\u9fa5a-zA-Z-z0-9]+$")
func IsValidID(id string) bool {
if IDReg != nil {
return IDReg.Match([]byte(id))
}
return false
}
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)
}