123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- // Package msg
- // 一个错误编号表示唯一一个错误发生地点
- // 错误编号格式:顺序号*1000000 + 程序编号*1000 + 模块编号
- // 模块内函数发生错误,编号:1-100
- // 特定错误,编号:101-200
- // 其他地方发生错误,占用地址列表
- // 1、
- package msg
- import "fmt"
- // ErrorCode 结构体表示错误编码
- type ErrorCode struct {
- ProgramID int
- ModuleID int
- }
- const (
- ServerTypeLogin = 1
- ServerTypeGate = 2
- ServerTypeWorld = 3
- ServerTypeAll = 999 // 所有服务器
- )
- const (
- GateModleGame = 1
- GateModleGate = 2
- GateModlePush = 3
- WorldModleDb = 1
- WorldModleGame = 2
- WorldModleGate = 3
- WorldModleSystemData = 4
- AllModelAll = 999 // 所有模块
- )
- // 对象类型 1000种
- const (
- ErrObjectParam = 1
- ErrObjectPlayer = 2
- ErrObjectConfig = 3
- ErrObjectCondition = 4
- ErrObjectTarget = 5
- ErrObjectItem = 6
- ErrObjectResult = 7
- ErrObjectHero = 9
- ErrObjectTreasures = 10
- ErrObjectChapter = 11
- ErrObjectReward = 12
- ErrObjectStam = 13
- ErrObjectSystem = 90
- ErrObjectDb = 91
- ErrObjectRedis = 92
- ErrObjectMax = 999
- )
- // 每个对象100种状态
- // 定义10个常用状态
- const (
- ErrStatusInvalid = 91 // 无效
- ErrStatusNotFound = 92 // 未发现
- ErrStatusNotEnough = 93 // 不够
- ErrStatusError = 94 // 错误
- ErrStatusOverstep = 95 // 超出
- )
- const (
- Multiple100 = 100
- // 全局参数 一般不要用,防止出现问题定位不到在所在程序及位置
- // 999 999 001 0000 - 999 999 999 9999
- ErrPlayerNoToken = 999_999_000_0000 + errPlayerNoToken*100
- ErrPlayerBanLogin = 999_999_000_0000 + errPlayerBanLogin*100
- ErrPlayerOtherLogin = 999_999_000_0000 + errPlayerOtherLogin*100
- ErrSystemUpgrade = 999_999_000_0000 + ErrObjectSystem*10000 + 1*100
- ErrSystemFull = 999_999_000_0000 + ErrObjectSystem*10000 + 2*100
- ErrSystemFoundCheat = 999_999_000_0000 + ErrObjectSystem*10000 + 3*100
- // 请求参数 100
- ErrParamInvalid = ErrObjectParam*Multiple100 + ErrStatusInvalid
- // 玩家 200
- errPlayerBanLogin = ErrObjectPlayer*Multiple100 + 1
- errPlayerOtherLogin = ErrObjectPlayer*Multiple100 + 2
- ErrPlayerNotFound = ErrObjectPlayer*Multiple100 + ErrStatusNotFound
- errPlayerNoToken = ErrObjectPlayer*Multiple100 + 3
- // 道具 300
- ErrItemNotFound = ErrObjectItem*Multiple100 + ErrStatusNotFound
- ErrItemNotEnough = ErrObjectItem*Multiple100 + ErrStatusNotEnough
- // 目标
- ErrTargetNotFound = ErrObjectTarget*Multiple100 + ErrStatusNotFound
- // 配置
- ErrConfigNotFound = ErrObjectConfig*Multiple100 + ErrStatusNotFound
- ErrConfigError = ErrObjectConfig*Multiple100 + ErrStatusError
- // 条件
- ErrConditionNotEnough = ErrObjectCondition*Multiple100 + ErrStatusNotEnough
- // 结果
- ErrResultError = ErrObjectResult*Multiple100 + ErrStatusError
- // 英雄 400
- ErrHeroNotFound = ErrObjectHero*Multiple100 + ErrStatusNotFound
- // 宝物 500
- ErrTreasuresNotFound = ErrObjectTreasures*Multiple100 + ErrStatusNotFound
- // 数据库 600
- ErrDBExec = ErrObjectDb*Multiple100 + 1
- ErrDBLoadNil = ErrObjectDb*Multiple100 + 2
- // redis 700
- ErrRedisExec = ErrObjectRedis*Multiple100 + 1
- // 章节
- ErrChapterNotFound = ErrObjectChapter*Multiple100 + ErrStatusNotFound
- //奖励
- ErrRewardNotFound = ErrObjectReward*Multiple100 + ErrStatusNotFound
- ErrRewardIsReceived = ErrObjectReward*Multiple100 + 1 // 已领取
- //体力
- ErrStamOverstep = ErrObjectStam*Multiple100 + ErrStatusOverstep
- // 配置
- // ErrConfigMaxOnline = ErrObjectConfig*Multiple100 + 1
- ErrMaxTypeMaxStatus = ErrObjectMax*100 + 99 // 99900+99 = 999_99
- ErrMaxVal = 999*1000_000_0000 + 999*1000_0000 + 999*10000 + 99*100 + 99
- )
- // 每种状态在同一个函数种可以使用100次,需要序号递增
- // initErrorCodes 是一个包级初始化函数,用于设置程序编号和模块编号
- // login 1:
- // world 2: db:1; game:2; gate:3; systemdata:4
- // gate 3:
- func InitErrorCodes(programID, moduleID int) *ErrorCode {
- errorCodes := new(ErrorCode)
- errorCodes.ProgramID = programID
- errorCodes.ModuleID = moduleID
- return errorCodes
- }
- // GenerateErrorCode 生成错误编号,只需要提供顺序号
- func (ec *ErrorCode) GenerateErrorCode(errObj int, errStatus int, seq int) int {
- return ec.ProgramID*1000_000_0000 + ec.ModuleID*1000_0000 + errObj*10000 + errStatus*100 + seq
- }
- // 支持输入格式
- // ojbstatus
- // objstatus,seq
- //obj,status,seq
- // promodelobjstatusseq
- // promodelobjstatusseq,seq
- func (ec *ErrorCode) CalcErrorCode(objStatusSeq ...int) int {
- num := len(objStatusSeq)
- switch num {
- case 0:
- return 0
- case 1:
- // objstatus
- // promodelobjstatusseq
- if objStatusSeq[0] > ErrObjectMax*10000 {
- return objStatusSeq[0]
- }
- return ec.GenerateErrorCode(objStatusSeq[0]/100, (objStatusSeq[0] % 100), 0)
- case 2:
- // objstatus,seq
- // promodelobjstatusseq,seq
- if objStatusSeq[0] > ErrObjectMax*10000 {
- return objStatusSeq[0] + objStatusSeq[1]
- }
- return ec.GenerateErrorCode(objStatusSeq[0]/100, (objStatusSeq[0] % 100), objStatusSeq[1])
- case 3:
- return ec.GenerateErrorCode(objStatusSeq[0], objStatusSeq[1], objStatusSeq[2])
- default:
- return 0
- }
- }
- func (ec *ErrorCode) PrintError(errCode int, errMsg string) {
- errCode2 := ec.CalcErrorCode(errCode)
- // code := (errCode2 % 1000_0000) / 100
- // fmt.Printf("%v-%v: %v %s\n", errCode2, errCode2+99, code, errMsg)
- fmt.Printf("%v: %s\n", errCode2, errMsg)
- }
- func PrintErrorCode() {
- errorEncoder1 := InitErrorCodes(ServerTypeGate, GateModleGame)
- errorEncoder1.PrintError(ErrParamInvalid, "参数错误")
- errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录")
- errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录")
- errorEncoder1.PrintError(ErrPlayerNotFound, "玩家未登录")
- errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在")
- errorEncoder2 := InitErrorCodes(ServerTypeWorld, WorldModleGame)
- errorEncoder2.PrintError(ErrItemNotEnough, "道具不足")
- errorEncoder2.PrintError(ErrItemNotFound, "道具不存在")
- errorEncoder2.PrintError(ErrHeroNotFound, "英雄不存在")
- errorEncoder2.PrintError(ErrTreasuresNotFound, "宝物不存在")
- errorEncoder2.PrintError(ErrDBExec, "数据库错误")
- errorEncoder2.PrintError(ErrDBLoadNil, "数据库加载错误")
- errorEncoder2.PrintError(ErrRedisExec, "缓存错误")
- errorEncoder2.PrintError(ErrTargetNotFound, "目标未发现")
- errorEncoder2.PrintError(ErrConfigNotFound, "配置未发现")
- errorEncoder2.PrintError(ErrConditionNotEnough, "条件不满足")
- errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在")
- errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录")
- errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录")
- errorEncoder1.PrintError(ErrSystemUpgrade, "系统维护")
- errorEncoder1.PrintError(ErrSystemFull, "服务器满")
- errorEncoder1.PrintError(ErrSystemFoundCheat, "数据异常")
- // 20010019100:参数错误
- // 20010020100:禁止登录
- // 20010020200:异地登录
- // 20010029200:玩家未登录
- // 20010020300:玩家凭证不存在
- // 20010020400:达到最大在线数
- // 30020030100:道具不足
- // 30020039200:道具不存在
- // 30020049200:英雄不存在
- // 30020059200:宝物不存在
- // 30020060100:数据库错误
- // 30020060200:数据库加载错误
- // 30020070100:缓存错误
- }
|