errors.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. // Package msg
  2. // 一个错误编号表示唯一一个错误发生地点
  3. // 错误编号格式:顺序号*1000000 + 程序编号*1000 + 模块编号
  4. // 模块内函数发生错误,编号:1-100
  5. // 特定错误,编号:101-200
  6. // 其他地方发生错误,占用地址列表
  7. // 1、
  8. package msg
  9. import "fmt"
  10. // ErrorCode 结构体表示错误编码
  11. type ErrorCoder struct {
  12. ProgramID int
  13. ModuleID int
  14. }
  15. // 程序
  16. const (
  17. ServerTypeLogin = 1
  18. ServerTypeGate = 2
  19. ServerTypeWorld = 3
  20. ServerTypeGameFrameSync = 4
  21. ServerTypeAll = 999 // 所有服务器通用
  22. )
  23. // gate模块
  24. const (
  25. GateModleGame = 1
  26. GateModleGate = 2
  27. GateModlePush = 3
  28. )
  29. // world模块
  30. const (
  31. WorldModleDb = 1
  32. WorldModleGame = 2
  33. WorldModleGate = 3
  34. WorldModleSystemData = 4
  35. WorldModleChat = 5
  36. AllModelAll = 999 // 所有模块通用
  37. )
  38. // GameFrameSync模块
  39. const (
  40. GameFrameSyncModleDb = 1
  41. GameFrameSyncModleGame = 2
  42. GameFrameSyncModleGate = 3
  43. GameFrameSyncModleSystemData = 4
  44. GameFrameSyncSync = 5
  45. )
  46. // 对象类型 1000种
  47. const (
  48. ErrObjectParam = 1
  49. ErrObjectPlayer = 2
  50. ErrObjectConfig = 3
  51. ErrObjectCondition = 4
  52. ErrObjectTarget = 5
  53. ErrObjectItem = 6
  54. ErrObjectResult = 7
  55. ErrObjectHero = 9
  56. ErrObjectTreasures = 10
  57. ErrObjectChapter = 11
  58. ErrObjectReward = 12
  59. ErrObjectStam = 13
  60. ErrObjectChat = 14
  61. ErrObjectLegend = 15
  62. ErrObjectFriend = 16
  63. ErrObjectPatrol = 17
  64. ErrObjectTask = 18
  65. ErrObjectShop = 19
  66. ErrObjectAc = 20
  67. ErrObjectGameSync = 50 // 游戏同步
  68. ErrObjectSystem = 90
  69. ErrObjectDb = 91
  70. ErrObjectRedis = 92
  71. ErrObjectFunc = 93 // 函数
  72. ErrObjectMax = 999
  73. )
  74. // 每个对象100种状态
  75. // 定义10个常用状态
  76. const (
  77. ErrStatusInvalid = 91 // 无效
  78. ErrStatusNotFound = 92 // 未发现
  79. ErrStatusNotEnough = 93 // 不够
  80. ErrStatusError = 94 // 错误
  81. ErrStatusOverstep = 95 // 超出
  82. )
  83. const (
  84. Multiple100 = 100
  85. // 全局参数 一般不要用,防止出现问题定位不到在所在程序及位置
  86. // 999 999 001 0000 - 999 999 999 9999
  87. ErrUniquePlayerNoToken = 999_999_000_0000 + errPlayerNoToken*100
  88. ErrUniquePlayerBanLogin = 999_999_000_0000 + errPlayerBanLogin*100
  89. ErrUniquePlayerOtherLogin = 999_999_000_0000 + errPlayerOtherLogin*100
  90. ErrUniqueSystemUpgrade = 999_999_000_0000 + ErrObjectSystem*10000 + 1*100
  91. ErrUniqueSystemFull = 999_999_000_0000 + ErrObjectSystem*10000 + 2*100
  92. ErrUniqueSystemFoundCheat = 999_999_000_0000 + ErrObjectSystem*10000 + 3*100
  93. // 请求参数 100
  94. ErrParamInvalid = ErrObjectParam*Multiple100 + ErrStatusInvalid
  95. // 玩家 200
  96. errPlayerBanLogin = ErrObjectPlayer*Multiple100 + 1
  97. errPlayerOtherLogin = ErrObjectPlayer*Multiple100 + 2
  98. ErrPlayerNotFound = ErrObjectPlayer*Multiple100 + ErrStatusNotFound
  99. errPlayerNoToken = ErrObjectPlayer*Multiple100 + 3
  100. // 道具 300
  101. ErrItemNotFound = ErrObjectItem*Multiple100 + ErrStatusNotFound
  102. ErrItemNotEnough = ErrObjectItem*Multiple100 + ErrStatusNotEnough
  103. // 目标
  104. ErrTargetNotFound = ErrObjectTarget*Multiple100 + ErrStatusNotFound
  105. // 配置
  106. ErrConfigNotFound = ErrObjectConfig*Multiple100 + ErrStatusNotFound
  107. ErrConfigError = ErrObjectConfig*Multiple100 + ErrStatusError
  108. // 条件
  109. ErrConditionNotEnough = ErrObjectCondition*Multiple100 + ErrStatusNotEnough
  110. // 结果
  111. ErrResultError = ErrObjectResult*Multiple100 + ErrStatusError
  112. // 英雄 400
  113. ErrHeroNotFound = ErrObjectHero*Multiple100 + ErrStatusNotFound
  114. // 宝物 500
  115. ErrTreasuresNotFound = ErrObjectTreasures*Multiple100 + ErrStatusNotFound
  116. // 数据库 600
  117. ErrDBExec = ErrObjectDb*Multiple100 + 1
  118. ErrDBLoadNil = ErrObjectDb*Multiple100 + 2
  119. // redis 700
  120. ErrRedisExec = ErrObjectRedis*Multiple100 + 1
  121. // 章节
  122. ErrChapterNotFound = ErrObjectChapter*Multiple100 + ErrStatusNotFound
  123. ErrChapterLimit = ErrObjectChapter*Multiple100 + ErrStatusError
  124. //奖励
  125. ErrRewardNotFound = ErrObjectReward*Multiple100 + ErrStatusNotFound
  126. ErrRewardIsReceived = ErrObjectReward*Multiple100 + 1 // 已领取
  127. //体力
  128. ErrStamOverstep = ErrObjectStam*Multiple100 + ErrStatusOverstep
  129. //聊天
  130. ErrEmojiError = ErrObjectChat*Multiple100 + 1
  131. ErrEmojiUnlock = ErrObjectChat*Multiple100 + 2
  132. ErrChatError = ErrObjectChat*Multiple100 + 3
  133. ErrChatBlockedChannel = ErrObjectChat*Multiple100 + 4
  134. ErrChatBlockedUser = ErrObjectChat*Multiple100 + 5
  135. ErrChatContent = ErrObjectChat*Multiple100 + 6
  136. ErrChatSendCDTs = ErrObjectChat*Multiple100 + 7
  137. ErrPrivatePlayerNotExist = ErrObjectChat*Multiple100 + 8
  138. ErrPrivatePlayerNotFriend = ErrObjectChat*Multiple100 + 9
  139. // 铭文
  140. ErrLegendUnique = ErrObjectLegend*Multiple100 + 1
  141. ErrLegendSlotUnlock = ErrObjectLegend*Multiple100 + 2
  142. ErrLegendSlotNoMatch = ErrObjectLegend*Multiple100 + 3
  143. ErrLevelNotEnough = ErrObjectLegend*Multiple100 + 4
  144. // 好友
  145. ErrFriendGiveError = ErrObjectFriend*Multiple100 + 1
  146. ErrFriendGiveHad = ErrObjectFriend*Multiple100 + 2
  147. ErrFriendRecCountFull = ErrObjectFriend*Multiple100 + 3
  148. ErrFriendNotRecCount = ErrObjectFriend*Multiple100 + 4
  149. // 巡逻
  150. ErrPatrolLock = ErrObjectPatrol*Multiple100 + 1
  151. ErrPatrolReceiveReward = ErrObjectPatrol*Multiple100 + 2
  152. ErrPatrolNoAdNum = ErrObjectPatrol*Multiple100 + 3
  153. ErrPatrolNoFastNum = ErrObjectPatrol*Multiple100 + 4
  154. ErrPatrolGtDanNum = ErrObjectPatrol*Multiple100 + 5
  155. ErrPatrolGtUserPoint = ErrObjectPatrol*Multiple100 + 6
  156. // 任务
  157. ErrTaskUnfinished = ErrObjectTask*Multiple100 + 1
  158. ErrTaskUnClaimable = ErrObjectTask*Multiple100 + 2
  159. ErrTaskIsClaimed = ErrObjectTask*Multiple100 + 3
  160. ErrTaskClaimErr = ErrObjectTask*Multiple100 + 4
  161. // 商店
  162. ErrShopFreeRefreshNotEnough = ErrObjectShop*Multiple100 + 1
  163. ErrShopGoldRefreshNotEnough = ErrObjectShop*Multiple100 + 2
  164. ErrShopAdRefreshNotEnough = ErrObjectShop*Multiple100 + 3
  165. ErrShopGoodsNotUnlock = ErrObjectShop*Multiple100 + 4
  166. ErrShopGoodsBuyNotEnough = ErrObjectShop*Multiple100 + 5
  167. ErrShopGoodsOwned = ErrObjectShop*Multiple100 + 6
  168. // 精彩活动
  169. ErrAcAlreadyBuy = ErrObjectAc*Multiple100 + 1
  170. ErrAcCardNotBuy = ErrObjectAc*Multiple100 + 2
  171. ErrAcCardNotActive = ErrObjectAc*Multiple100 + 3
  172. ErrAcAlreadyGet = ErrObjectAc*Multiple100 + 4
  173. ErrAcCardAlreadyBuy = ErrObjectAc*Multiple100 + 5
  174. ErrAcActiveAdMaxCount = ErrObjectAc*Multiple100 + 6
  175. ErrAcOverLimit = ErrObjectAc*Multiple100 + 7
  176. ErrAcLocked = ErrObjectAc*Multiple100 + 8
  177. ErrFirstChargeNotBuy = ErrObjectAc*Multiple100 + 9
  178. ErrAcNoReward = ErrObjectAc*Multiple100 + 10
  179. ErrAcNotOpen = ErrObjectAc*Multiple100 + 11
  180. ErrAcNotComplete = ErrObjectAc*Multiple100 + 12
  181. ErrGameSyncLoginOther = ErrObjectGameSync*Multiple100 + 1
  182. ErrGameSyncParam = ErrObjectGameSync*Multiple100 + 2
  183. ErrRoomDisband = ErrObjectGameSync*Multiple100 + 3
  184. ErrRoomFrameErr = ErrObjectGameSync*Multiple100 + 4
  185. ErrPlayerSettleErr = ErrObjectGameSync*Multiple100 + 5
  186. ErrRoomCacheFrameErr = ErrObjectGameSync*Multiple100 + 6
  187. ErrRoomNotFoundPlayerErr = ErrObjectGameSync*Multiple100 + 6
  188. // 配置
  189. // ErrConfigMaxOnline = ErrObjectConfig*Multiple100 + 1
  190. ErrMaxTypeMaxStatus = ErrObjectMax*100 + 99 // 99900+99 = 999_99
  191. ErrMaxVal = 999*1000_000_0000 + 999*1000_0000 + 999*10000 + 99*100 + 99
  192. )
  193. // 每种状态在同一个函数种可以使用100次,需要序号递增
  194. // initErrorCodes 是一个包级初始化函数,用于设置程序编号和模块编号
  195. // login 1:
  196. // world 2: db:1; game:2; gate:3; systemdata:4
  197. // gate 3:
  198. // var (
  199. // appErrorCoder *ErrorCoder
  200. // )
  201. func InitErrorCodes(programID, moduleID int) *ErrorCoder {
  202. errorCodes := new(ErrorCoder)
  203. errorCodes.ProgramID = programID
  204. errorCodes.ModuleID = moduleID
  205. return errorCodes
  206. }
  207. // CalcErrorCode3 生成错误编号,只需要提供顺序号
  208. func (ec *ErrorCoder) CalcErrorCode4(moduleId int, errObj int, errStatus int, seq int) int {
  209. return ec.ProgramID*1000_000_0000 + moduleId*1000_0000 + errObj*10000 + errStatus*100 + seq
  210. }
  211. func (ec *ErrorCoder) CalcErrorCode3(errObj int, errStatus int, seq int) int {
  212. return ec.CalcErrorCode4(ec.ModuleID, errObj, errStatus, seq)
  213. }
  214. func (ec *ErrorCoder) CalcErrorCode2(errObj int, errStatus int) int {
  215. return ec.CalcErrorCode4(ec.ModuleID, errObj, errStatus, 0)
  216. }
  217. func (ec *ErrorCoder) CalcErrorCode(errObjStatus int) int {
  218. return ec.CalcErrorCode4(ec.ModuleID, 0, errObjStatus, 0)
  219. }
  220. // func (ec *ErrorCoder) CalcUniqueErrorCode(errObjStatusSeq int) int {
  221. // return errObjStatusSeq
  222. // }
  223. func (ec *ErrorCoder) PrintError(errCode int, errMsg string) {
  224. errCode2 := ec.CalcErrorCode(errCode)
  225. // code := (errCode2 % 1000_0000) / 100
  226. // fmt.Printf("%v-%v: %v %s\n", errCode2, errCode2+99, code, errMsg)
  227. fmt.Printf("%v: %s\n", errCode2, errMsg)
  228. }
  229. // func InitAppErrorCoder(programID int) *ErrorCoder {
  230. // errorCoder := new(ErrorCoder)
  231. // errorCoder.ProgramID = programID
  232. // appErrorCoder = errorCoder
  233. // return errorCoder
  234. // }
  235. // return appErrorCoder.ProgramID*1000_000_00_00 + appErrorCoder.ModuleID*1000_0000 + errObj*10000 + errStatus*100 + seq
  236. // func CalcErrorCode(seq int) int {
  237. // return appErrorCoder.ProgramID*1000_000_00_00 + seq
  238. // }
  239. // func GetErrCoderMethodWithFunc(funcFlag ...int) func(int) int {
  240. // funcFlag1 := 0
  241. // if len(funcFlag) > 0 {
  242. // funcFlag1 = funcFlag[0]
  243. // }
  244. // return func(seq int) int {
  245. // return appErrorCoder.CalcErrorCode4(appErrorCoder.ModuleID, ErrObjectFunc, funcFlag1, seq)
  246. // }
  247. // }
  248. func PrintErrorCode() {
  249. // errorEncoder1 := InitErrorCodes(ServerTypeGate, GateModleGame)
  250. // errorEncoder1.PrintError(ErrParamInvalid, "参数错误")
  251. // errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录")
  252. // errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录")
  253. // errorEncoder1.PrintError(ErrPlayerNotFound, "玩家未登录")
  254. // errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在")
  255. // errorEncoder2 := InitErrorCodes(ServerTypeWorld, WorldModleGame)
  256. // errorEncoder2.PrintError(ErrItemNotEnough, "道具不足")
  257. // errorEncoder2.PrintError(ErrItemNotFound, "道具不存在")
  258. // errorEncoder2.PrintError(ErrHeroNotFound, "英雄不存在")
  259. // errorEncoder2.PrintError(ErrTreasuresNotFound, "宝物不存在")
  260. // errorEncoder2.PrintError(ErrDBExec, "数据库错误")
  261. // errorEncoder2.PrintError(ErrDBLoadNil, "数据库加载错误")
  262. // errorEncoder2.PrintError(ErrRedisExec, "缓存错误")
  263. // errorEncoder2.PrintError(ErrTargetNotFound, "目标未发现")
  264. // errorEncoder2.PrintError(ErrConfigNotFound, "配置未发现")
  265. // errorEncoder2.PrintError(ErrConditionNotEnough, "条件不满足")
  266. // errorEncoder1.PrintError(ErrPlayerNoToken, "玩家凭证不存在")
  267. // errorEncoder1.PrintError(ErrPlayerBanLogin, "禁止登录")
  268. // errorEncoder1.PrintError(ErrPlayerOtherLogin, "异地登录")
  269. // errorEncoder1.PrintError(ErrSystemUpgrade, "系统维护")
  270. // errorEncoder1.PrintError(ErrSystemFull, "服务器满")
  271. // errorEncoder1.PrintError(ErrSystemFoundCheat, "数据异常")
  272. // 20010019100:参数错误
  273. // 20010020100:禁止登录
  274. // 20010020200:异地登录
  275. // 20010029200:玩家未登录
  276. // 20010020300:玩家凭证不存在
  277. // 20010020400:达到最大在线数
  278. // 30020030100:道具不足
  279. // 30020039200:道具不存在
  280. // 30020049200:英雄不存在
  281. // 30020059200:宝物不存在
  282. // 30020060100:数据库错误
  283. // 30020060200:数据库加载错误
  284. // 30020070100:缓存错误
  285. }