// Package msg // 一个错误编号表示唯一一个错误发生地点 // 错误编号格式:顺序号*1000000 + 程序编号*1000 + 模块编号 // 模块内函数发生错误,编号:1-100 // 特定错误,编号:101-200 // 其他地方发生错误,占用地址列表 // 1、 package errorcoder // ErrorCode 结构体表示错误编码 type ErrorCoder struct { ProgramID int64 ModuleID int64 } // 程序 const ( ServerTypeLogin = 1 ServerTypeGate = 2 ServerTypeWorld = 3 ServerTypeGameFrameSync = 4 ServerTypeMax = 999 ServerTypeAll = 0 // 所有服务器通用 ) // gate模块 const ( GateModleGame = 1 GateModleGate = 2 GateModlePush = 3 ) // world模块 const ( WorldModleDb = 1 WorldModleGame = 2 WorldModleGate = 3 WorldModleSystemData = 4 WorldModleChat = 5 AllModleMax = 999 AllModleAll = 0 // 所有模块通用 ) // GameFrameSync模块 const ( GameFrameSyncModleDb = 1 GameFrameSyncModleGame = 2 GameFrameSyncModleGate = 3 GameFrameSyncModleSystemData = 4 GameFrameSyncSync = 5 ) // 对象类型 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 // ErrObjectChat = 14 // ErrObjectLegend = 15 // ErrObjectFriend = 16 // ErrObjectPatrol = 17 // ErrObjectTask = 18 // ErrObjectShop = 19 // ErrObjectAc = 20 // ErrObjectGameSync = 50 // 游戏同步 ErrObjectSystem = 90 ErrObjectDb = 91 ErrObjectRedis = 92 ErrObjectFunc = 93 // 函数 ErrObjectMax = 999 ) // 每个对象100种状态 // 定义10个常用状态 const ( ErrStatusInvalid = 91 // 无效 ErrStatusNotFound = 92 // 未发现 ErrStatusNotEnough = 93 // 不够 ErrStatusError = 94 // 错误 ErrStatusOverstep = 95 // 超出 ) const ( ErrStatusLoadProcess = 91 // LoadProcess出错 ) const ( MultipleObject = 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 // ErrPlayerNoToken = 999_999_000_0000 + errPlayerNoToken*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*MultipleObject + ErrStatusInvalid // 玩家 200 errPlayerBanLogin = ErrObjectPlayer*MultipleObject + 1 errPlayerOtherLogin = ErrObjectPlayer*MultipleObject + 2 ErrPlayerNotFound = ErrObjectPlayer*MultipleObject + ErrStatusNotFound errPlayerNoToken = ErrObjectPlayer*MultipleObject + 3 // 道具 300 ErrItemNotFound = ErrObjectItem*MultipleObject + ErrStatusNotFound ErrItemNotEnough = ErrObjectItem*MultipleObject + ErrStatusNotEnough // 目标 ErrTargetNotFound = ErrObjectTarget*MultipleObject + ErrStatusNotFound // 配置 ErrConfigNotFound = ErrObjectConfig*MultipleObject + ErrStatusNotFound ErrConfigError = ErrObjectConfig*MultipleObject + ErrStatusError // 条件 ErrConditionNotEnough = ErrObjectCondition*MultipleObject + ErrStatusNotEnough // 结果 ErrResultError = ErrObjectResult*MultipleObject + ErrStatusError // 英雄 400 // ErrHeroNotFound = ErrObjectHero*MultipleObject + ErrStatusNotFound // // 宝物 500 // ErrTreasuresNotFound = ErrObjectTreasures*MultipleObject + ErrStatusNotFound // 数据库 600 ErrDBExec = ErrObjectDb*MultipleObject + 1 ErrDBLoadNil = ErrObjectDb*MultipleObject + 2 // redis 700 ErrRedisExec = ErrObjectRedis*MultipleObject + 1 // 章节 // ErrChapterNotFound = ErrObjectChapter*Multiple100 + ErrStatusNotFound // ErrChapterLimit = ErrObjectChapter*Multiple100 + ErrStatusError // //奖励 // ErrRewardNotFound = ErrObjectReward*Multiple100 + ErrStatusNotFound // ErrRewardIsReceived = ErrObjectReward*Multiple100 + 1 // 已领取 // //体力 // ErrStamOverstep = ErrObjectStam*Multiple100 + ErrStatusOverstep //聊天 // ErrEmojiError = ErrObjectChat*Multiple100 + 1 // ErrEmojiUnlock = ErrObjectChat*Multiple100 + 2 // ErrChatError = ErrObjectChat*Multiple100 + 3 // ErrChatBlockedChannel = ErrObjectChat*Multiple100 + 4 // ErrChatBlockedUser = ErrObjectChat*Multiple100 + 5 // ErrChatContent = ErrObjectChat*Multiple100 + 6 // ErrChatSendCDTs = ErrObjectChat*Multiple100 + 7 // ErrPrivatePlayerNotExist = ErrObjectChat*Multiple100 + 8 // // 铭文 // ErrLegendUnique = ErrObjectLegend*Multiple100 + 1 // ErrLegendSlotUnlock = ErrObjectLegend*Multiple100 + 2 // ErrLegendSlotNoMatch = ErrObjectLegend*Multiple100 + 3 // ErrLevelNotEnough = ErrObjectLegend*Multiple100 + 4 // // 好友 // ErrFriendGiveError = ErrObjectFriend*Multiple100 + 1 // ErrFriendGiveHad = ErrObjectFriend*Multiple100 + 2 // ErrFriendRecCountFull = ErrObjectFriend*Multiple100 + 3 // ErrFriendNotRecCount = ErrObjectFriend*Multiple100 + 4 // // 巡逻 // ErrPatrolLock = ErrObjectPatrol*Multiple100 + 1 // ErrPatrolReceiveReward = ErrObjectPatrol*Multiple100 + 2 // ErrPatrolNoAdNum = ErrObjectPatrol*Multiple100 + 3 // ErrPatrolNoFastNum = ErrObjectPatrol*Multiple100 + 4 // ErrPatrolGtDanNum = ErrObjectPatrol*Multiple100 + 5 // ErrPatrolGtUserPoint = ErrObjectPatrol*Multiple100 + 6 // // 任务 // ErrTaskUnfinished = ErrObjectTask*Multiple100 + 1 // ErrTaskUnClaimable = ErrObjectTask*Multiple100 + 2 // ErrTaskIsClaimed = ErrObjectTask*Multiple100 + 3 // ErrTaskClaimErr = ErrObjectTask*Multiple100 + 4 // // 商店 // ErrShopFreeRefreshNotEnough = ErrObjectShop*Multiple100 + 1 // ErrShopGoldRefreshNotEnough = ErrObjectShop*Multiple100 + 2 // ErrShopAdRefreshNotEnough = ErrObjectShop*Multiple100 + 3 // ErrShopGoodsNotUnlock = ErrObjectShop*Multiple100 + 4 // ErrShopGoodsBuyNotEnough = ErrObjectShop*Multiple100 + 5 // ErrShopGoodsOwned = ErrObjectShop*Multiple100 + 6 // // 精彩活动 // ErrAcAlreadyBuy = ErrObjectAc*Multiple100 + 1 // ErrAcCardNotBuy = ErrObjectAc*Multiple100 + 2 // ErrAcCardNotActive = ErrObjectAc*Multiple100 + 3 // ErrAcAlreadyGet = ErrObjectAc*Multiple100 + 4 // ErrAcCardAlreadyBuy = ErrObjectAc*Multiple100 + 5 // ErrAcActiveAdMaxCount = ErrObjectAc*Multiple100 + 6 // ErrAcOverLimit = ErrObjectAc*Multiple100 + 7 // ErrAcLocked = ErrObjectAc*Multiple100 + 8 // ErrFirstChargeNotBuy = ErrObjectAc*Multiple100 + 9 // ErrAcNoReward = ErrObjectAc*Multiple100 + 10 // ErrAcNotOpen = ErrObjectAc*Multiple100 + 11 // ErrAcNotComplete = ErrObjectAc*Multiple100 + 12 // ErrGameSyncLoginOther = ErrObjectGameSync*Multiple100 + 1 // ErrGameSyncParam = ErrObjectGameSync*Multiple100 + 2 // ErrRoomDisband = ErrObjectGameSync*Multiple100 + 3 // ErrRoomFrameErr = ErrObjectGameSync*Multiple100 + 4 // ErrPlayerSettleErr = ErrObjectGameSync*Multiple100 + 5 // ErrRoomCacheFrameErr = ErrObjectGameSync*Multiple100 + 6 // ErrRoomNotFoundPlayerErr = ErrObjectGameSync*Multiple100 + 6 // 配置 // 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: var ( appErrorCoder *ErrorCoder ) func InitModuleErrorCoder(programID, moduleID int64) *ErrorCoder { errorCodes := new(ErrorCoder) errorCodes.ProgramID = programID errorCodes.ModuleID = moduleID return errorCodes } func (ec *ErrorCoder) CalcErrorCode1(seq int64) int64 { return ec.ProgramID*1000_000_0000 + ec.ModuleID*1000_0000 + seq } // CalcErrorCode3 生成错误编号,只需要提供顺序号 func (ec *ErrorCoder) CalcErrorCode3(errObj int64, errStatus int64, seq int64) int64 { return ec.ProgramID*1000_000_0000 + ec.ModuleID*1000_0000 + errObj*10000 + errStatus*100 + seq } func (ec *ErrorCoder) CalcErrorCode4(moduleId int64, errObj int64, errStatus int64, seq int64) int64 { return ec.ProgramID*1000_000_0000 + moduleId*1000_0000 + errObj*10000 + errStatus*100 + seq } func InitAppErrorCoder(programID int64) *ErrorCoder { errorCoder := new(ErrorCoder) errorCoder.ProgramID = programID errorCoder.ModuleID = AllModleAll appErrorCoder = errorCoder return errorCoder } // return appErrorCoder.ProgramID*1000_000_00_00 + appErrorCoder.ModuleID*1000_0000 + errObj*10000 + errStatus*100 + seq func CalcErrorCode(seq int64) int64 { return appErrorCoder.CalcErrorCode1(seq) } func GetErrCoderMethodWithFunc(funcAsState ...int64) func(int64) int { funcFlag1 := int64(0) if len(funcAsState) > 0 { funcFlag1 = funcAsState[0] } return func(seq int64) int { errCode := appErrorCoder.CalcErrorCode4(appErrorCoder.ModuleID, ErrObjectFunc, funcFlag1, seq) return int(errCode) } } func CalcInterfaceErrorCode(funcFlag int64, seq int64) int64 { return appErrorCoder.CalcErrorCode4(AllModleAll, ErrObjectFunc, funcFlag, seq) } func GetCalcInterfaceErrMethod(funcFlag ...int64) func(int64) int64 { funcFlag1 := int64(0) if len(funcFlag) > 0 { funcFlag1 = funcFlag[0] } return func(seq int64) int64 { return appErrorCoder.CalcErrorCode4(AllModleAll, ErrObjectFunc, funcFlag1, seq) } } func CalcUniqueErrorCode2(obj int64, state int64) int64 { return ServerTypeAll*1000_000_0000 + AllModleAll*1000_0000 + obj*10000 + state*100 // } func CalcUniqueErrorCode3(obj int64, state int64, seq int64) int64 { return ServerTypeAll*1000_000_0000 + AllModleAll*1000_0000 + obj*10000 + state*100 + seq // } func PrintErrorCode() { // errorEncoder1 := InitModuleErrorCoder(ServerTypeGate, GateModleGame) // errorEncoder1.PrintError(ErrParamInvalid, "参数错误") // errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录") // errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录") // errorEncoder1.PrintError(ErrPlayerNotFound, "玩家未登录") // errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在") // errorEncoder2 := InitModuleErrorCoder(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:缓存错误 }