login_msg.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/service"
  5. "rocommon/util"
  6. "roserver/baseserver/model"
  7. model2 "roserver/game/model"
  8. "roserver/serverproto"
  9. )
  10. func init() {
  11. //登陆操作并获取角色数据
  12. serverproto.Handle_GAME_CSLoginReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  13. msg := ev.Msg().(*serverproto.CSLoginReq)
  14. util.InfoF("receive CSLoginReq msg=%v cliId=%v", msg, cliId)
  15. if msg.OpenId == "" {
  16. ack := &serverproto.SCLoginAck{
  17. Error: int32(serverproto.ErrorCode_ERROR_FAIL),
  18. }
  19. model.ServiceReplay(ev, ack)
  20. return
  21. }
  22. if msg.GameVersion > 0 && msg.GameVersion != int32(serverproto.GameVersion_GameVersion_Main) {
  23. ack := &serverproto.SCLoginAck{
  24. Error: int32(serverproto.ErrorCode_ERROR_GAME_VERSION),
  25. }
  26. model.ServiceReplay(ev, ack)
  27. return
  28. }
  29. //当前区服务器总在线
  30. if model2.RoleMag.IsGameOnlineNumLimit() {
  31. ack := &serverproto.SCLoginAck{
  32. Error: int32(serverproto.ErrorCode_ERROR_ROLE_SERVER_LIMIT),
  33. }
  34. model.ServiceReplay(ev, ack)
  35. return
  36. }
  37. openId := model.ConvertPlatform(msg.OpenId, msg.Platform)
  38. //添加一个角色
  39. role, cidSame, bHas := model2.RoleMag.AddRole(cliId, openId, msg.SelectZone)
  40. if cidSame && role.GetOpenId() == openId {
  41. //重新登陆处理(同一个连接不允许多次发送CSLoginReq请求)
  42. if role.GetState() != model2.ROLE_STATE_DB_ADD_ROLE_SUCCESS {
  43. ack := &serverproto.SCLoginAck{
  44. Error: int32(serverproto.ErrorCode_ERROR_RELOGIN),
  45. }
  46. model.ServiceReplay(ev, ack)
  47. return
  48. }
  49. }
  50. if !cidSame && role.GetOpenId() == openId && bHas {
  51. kickNtf := &serverproto.SSUserKickNtf{
  52. Error: int32(serverproto.ErrorCode_ERROR_RELOGIN),
  53. ClientId: role.CliID().SessID,
  54. }
  55. role.ReplayGate(kickNtf, false)
  56. }
  57. role.SetSubPlatform(msg.SubPlatform)
  58. role.SetPlatform(msg.Platform)
  59. role.SetClientIP(msg.Ip)
  60. role.SetSelectZone(msg.SelectZone) //客户端登陆时选择的服务器zone
  61. role.SetHardFight(0)
  62. //利用缓存数据
  63. if bHas {
  64. role.SetSelectZone(msg.SelectZone) //客户端登陆时选择的服务器zone
  65. if role.GetState() == model2.ROLE_STATE_ONLINE {
  66. //把之前在线的玩家踢下线
  67. role.KickWithSave(int32(serverproto.ErrorCode_ERROR_RELOGIN))
  68. model2.RoleMag.RemoveRoleObj(role)
  69. role.SetCliID(cliId)
  70. model2.RoleMag.AddRoleObj(role)
  71. //role.LoginAck(serverproto.ErrorCode_ERROR_OK)
  72. role.SwitchState(int32(model2.ROLE_STATE_ONLINE), true) //不需要通知消息
  73. } else if role.GetState() == model2.ROLE_STATE_OFFLINE {
  74. //移除新建的角色信息,复用离线池中的数据
  75. model2.RoleMag.RemoveRoleFromChannel(role.CliID().SessID)
  76. role.SetCliID(cliId)
  77. //丛离线池中移除
  78. model2.RoleMag.RemoveOfflineRole(role.GetUUid())
  79. model2.RoleMag.AddRoleObj(role)
  80. //role.LoginAck(serverproto.ErrorCode_ERROR_OK)
  81. role.SwitchState(int32(model2.ROLE_STATE_ONLINE), true) //不需要通知消息
  82. } else {
  83. role.SwitchState(model2.ROLE_STATE_ZOMBIE, nil)
  84. //还没创建角色成功时,有可能发起再次登录请求操作
  85. if role.GetUUid() > 0 {
  86. model2.RoleMag.RemoveRoleObj(role)
  87. model2.RoleMag.AddRoleObj(role)
  88. }
  89. role.SetCliID(cliId)
  90. role.SetOpenId(openId)
  91. //拉取角色列表信息
  92. role.SwitchState(model2.ROLE_STATE_PULLING_LIST, nil)
  93. }
  94. } else {
  95. role.SetSelectZone(msg.SelectZone) //客户端登陆时选择的服务器zone
  96. role.SetOpenId(openId)
  97. //拉取角色列表信息
  98. role.SwitchState(model2.ROLE_STATE_PULLING_LIST, nil)
  99. }
  100. })
  101. //客户端断线重连
  102. serverproto.Handle_GAME_CSReconnectReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  103. msg := ev.Msg().(*serverproto.CSReconnectReq)
  104. util.InfoF("CSReconnectReq msg=%v", msg)
  105. ackMsg := &serverproto.SCReconnectAck{
  106. Error: int32(serverproto.ErrorCode_ERROR_ROLE_INVALID),
  107. }
  108. openId := model.ConvertPlatform(msg.OpenId, msg.Platform)
  109. reconnectUid, _ := model.Str2NumU64(msg.Uid)
  110. if reconnectUid <= 0 {
  111. reconnectRole := model2.RoleMag.GetRoleByOpenId(openId)
  112. if reconnectRole != nil {
  113. reconnectUid = reconnectRole.GetUUid()
  114. }
  115. if reconnectUid <= 0 {
  116. model.ServiceReplay(ev, ackMsg)
  117. util.InfoF("uid=%v openid=%v CSReconnectReqErr uid error", reconnectUid, openId)
  118. return
  119. }
  120. }
  121. //重新绑定session相关信息
  122. onlineRole := model2.RoleMag.GetRoleFromUUid(reconnectUid)
  123. offlineRole := model2.RoleMag.GetRoleFromOffline(reconnectUid)
  124. //存在离线数据
  125. if offlineRole != nil {
  126. if offlineRole.GetOpenId() != openId {
  127. model.ServiceReplay(ev, ackMsg)
  128. util.InfoF("uid=%v openid=%v CSReconnectReqErr openId error reLogin", reconnectUid, openId)
  129. return
  130. }
  131. offlineRole.SetReLogin(true)
  132. offlineRole.SetCliID(cliId)
  133. //移除新建的角色信息,复用离线池中的数据
  134. model2.RoleMag.RemoveRoleFromChannel(cliId.SessID)
  135. //丛离线池中移除
  136. model2.RoleMag.RemoveOfflineRole(reconnectUid)
  137. model2.RoleMag.AddRoleObj(offlineRole)
  138. } else if onlineRole != nil {
  139. //存在已经登陆的玩家
  140. if onlineRole.GetState() == model2.ROLE_STATE_ONLINE {
  141. util.InfoF("uid=%v open=%v reLogin", onlineRole.GetUUid(), onlineRole.GetOpenId())
  142. //把之前在线的玩家踢下线
  143. onlineRole.KickWithSave(int32(serverproto.ErrorCode_ERROR_RELOGIN))
  144. model2.RoleMag.RemoveRoleObj(onlineRole)
  145. onlineRole.SetReLogin(true)
  146. onlineRole.SetCliID(cliId)
  147. model2.RoleMag.AddRoleObj(onlineRole)
  148. //重新登陆前作一次保存操作
  149. onlineRole.Save()
  150. } else if onlineRole.GetState() == model2.ROLE_STATE_OFFLINE { //更新队列[RoleManager) Update]比较慢,状态已经是offline但是还没有放到offline列表中
  151. model2.RoleMag.RemoveRoleObj(onlineRole)
  152. onlineRole.SetReLogin(true)
  153. onlineRole.SetCliID(cliId)
  154. model2.RoleMag.AddRoleObj(onlineRole)
  155. } else {
  156. //在线但是没有登陆完成,发送重连消息太快,还没放到离线列表中
  157. util.InfoF("uid=%v openid=%v CSReconnectReqErr has not login finish yet reLogin state=%v", onlineRole.GetUUid(), openId, onlineRole.GetState())
  158. model.ServiceReplay(ev, ackMsg)
  159. return
  160. }
  161. }
  162. role := model2.RoleMag.GetRole(cliId)
  163. if role == nil {
  164. ackMsg.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
  165. model.ServiceReplay(ev, ackMsg)
  166. //kickNtf := &serverproto.SSUserKickNtf{
  167. // Error: int32(serverproto.ErrorCode_ERROR_FAIL),
  168. // ClientId: cliId.SessID,
  169. //}
  170. //model.ServiceReplay(ev, kickNtf)
  171. //超过时限的登录操作,或者之前非正常的登录操作导致role数据不存在(服务器意外重启导致的重连)
  172. util.InfoF("CSReconnectReqErr invalid reLogin cliid=%v uid=%v openid=%v", cliId, msg.Uid, msg.OpenId)
  173. return
  174. } //这边必须要做判断
  175. ackMsg.Error = int32(serverproto.ErrorCode_ERROR_OK)
  176. model.ServiceReplay(ev, ackMsg)
  177. role.SwitchState(int32(model2.ROLE_STATE_ONLINE), false) //不需要通知消息
  178. })
  179. //获取角色数据并返回
  180. serverproto.Handle_GAME_SSAccountGetRoleListAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  181. msg := ev.Msg().(*serverproto.SSAccountGetRoleListAck)
  182. util.DebugF("receive SSAccountGetRoleListAck msg=%v cliId=%v", msg, cliId)
  183. if len(msg.Roles) > 0 {
  184. //在线离线处理
  185. //和管道绑定的角色
  186. channelRole := model2.RoleMag.GetRoleFromChannel(cliId.SessID)
  187. if channelRole == nil {
  188. util.ErrorF("receive SSAccountGetRoleListAckErr msg=%v cliId=%v", msg, cliId)
  189. return
  190. }
  191. //当前在线的角色
  192. onlineRole := model2.RoleMag.GetRoleFromUUid(msg.Roles[0].Uid)
  193. offlineRole := model2.RoleMag.GetRoleFromOffline(msg.Roles[0].Uid)
  194. //离线数据还存在
  195. if offlineRole != nil {
  196. util.InfoF("relogin offlinerole... msguid=%v oflineuid=%v", msg.Roles[0].Uid, offlineRole.GetUUid())
  197. offlineRole.SetReLogin(true)
  198. offlineRole.SetCliID(channelRole.CliID())
  199. //移除新建的角色信息,复用离线池中的数据
  200. model2.RoleMag.RemoveRoleFromChannel(cliId.SessID)
  201. //丛离线池中移除
  202. model2.RoleMag.RemoveOfflineRole(msg.Roles[0].Uid)
  203. model2.RoleMag.AddRoleObj(offlineRole)
  204. } else if onlineRole != nil {
  205. //这边不能判断State,有可能切换成offline但是还在online列表中(update时间修改长了)
  206. //存在已经登陆的玩家
  207. util.InfoF("relogin uuid=%v", onlineRole.GetUUid())
  208. //把之前在线的玩家踢下线
  209. onlineRole.SwitchState(model2.ROLE_STATE_OFFLINE, nil)
  210. model2.RoleMag.RemoveRoleObj(onlineRole)
  211. onlineRole.SetReLogin(true)
  212. onlineRole.SetCliID(channelRole.CliID())
  213. model2.RoleMag.AddRoleObj(onlineRole)
  214. //重新登陆前作一次保存操作
  215. onlineRole.Save()
  216. //if onlineRole.GetState() == model2.ROLE_STATE_ONLINE {
  217. // util.InfoF("relogin uuid=%v", onlineRole.GetUUid())
  218. // //把之前在线的玩家踢下线
  219. // onlineRole.SwitchState(model2.ROLE_STATE_OFFLINE, nil)
  220. // model2.RoleMag.RemoveRoleObj(onlineRole)
  221. //
  222. // onlineRole.SetReLogin(true)
  223. // onlineRole.SetCliID(channelRole.CliID())
  224. // model2.RoleMag.AddRoleObj(onlineRole)
  225. // //重新登陆前作一次保存操作
  226. // onlineRole.Save()
  227. //} else {
  228. // //在线但是没有登陆完成
  229. // //todo...
  230. //}
  231. }
  232. }
  233. //这边可能获取到空数据
  234. role := model2.RoleMag.GetRole(cliId)
  235. if role == nil {
  236. util.ErrorF("receive SSAccountGetRoleListAckErr openid=%v msg=%v", role.GetOpenId(), msg)
  237. return
  238. } //这边必须要做判断
  239. roleInfo := role.(*model2.Role)
  240. if len(roleInfo.UuidList) <= 0 && len(msg.Roles) > 0 {
  241. for _, dbRole := range msg.Roles {
  242. roleInfo.UuidList = append(roleInfo.UuidList, dbRole.Uid)
  243. roleInfo.UuidRoleList[dbRole.Uid] = dbRole
  244. }
  245. }
  246. //查看服务器是否已经关闭创建角色
  247. if len(roleInfo.UuidList) <= 0 {
  248. if msg.IsCloseRegister {
  249. roleInfo.LoginAck(serverproto.ErrorCode_ERROR_ROLE_CAN_NOT_REGISTER)
  250. roleInfo.SwitchState(model2.ROLE_STATE_ZOMBIE, nil)
  251. return
  252. }
  253. }
  254. role.SwitchState(model2.ROLE_STATE_PULLED_LIST, nil)
  255. })
  256. serverproto.Handle_GAME_CSCreateRoleReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  257. // 如果做成多角色系统以后由客户端发起创建角色请求[CSCreateRoleReq]
  258. //todo...安全性检查,频繁发该协议
  259. msg := ev.Msg().(*serverproto.CSCreateRoleReq)
  260. util.InfoF("CSCreateRoleReq msg=%v cliId=%v", msg, cliId)
  261. role := model2.RoleMag.GetRole(cliId)
  262. if role == nil {
  263. ackMsg := serverproto.SCCreateRoleAck{
  264. Error: int32(serverproto.ErrorCode_ERROR_FAIL),
  265. }
  266. model.ServiceReplay(ev, ackMsg)
  267. util.ErrorF("uid=%v err role cliId not find openId=%v", msg.OpenId)
  268. return
  269. }
  270. if role.GetState() != model2.ROLE_STATE_PULLED_LIST &&
  271. role.GetState() != model2.ROLE_STATE_CREATE_FAILURE {
  272. util.ErrorF("uid=%v err role stat=%v openId=%v", role.GetUUid(), role.GetState(), msg.OpenId)
  273. return
  274. }
  275. //合法性检查
  276. _, ok := serverproto.JobCfgLoader[msg.JobId]
  277. if !ok {
  278. ackMsg := &serverproto.SCCreateRoleAck{
  279. Error: int32(serverproto.ErrorCode_ERROR_FAIL),
  280. }
  281. role.ReplayGate(ackMsg, true)
  282. util.ErrorF("CSCreateRoleReq JobCfgLoader not found openid=%v jobId=%v activeCode=%v", msg.OpenId, msg.JobId, msg.ActiveCode)
  283. return
  284. }
  285. //判断是否是激活码模式
  286. sConfig := service.GetServiceConfig()
  287. if sConfig.Node.AuthMode == model2.AUTHMODE_ACTIVE {
  288. //1,判断激活码是否存在
  289. //2,后续发给服务器判断激活码是否已经被使用
  290. retErr := model.CheckActiveCode(msg.ActiveCode)
  291. if retErr != serverproto.ErrorCode_ERROR_OK {
  292. ackMsg := &serverproto.SCCreateRoleAck{
  293. Error: int32(retErr),
  294. }
  295. role.ReplayGate(ackMsg, true)
  296. util.ErrorF("CSCreateRoleReq activeCode err=%v activeCode=%v openId=%v", retErr, msg.ActiveCode, msg.OpenId)
  297. return
  298. }
  299. }
  300. //创建角色
  301. role.SetCreateData(msg)
  302. role.SwitchState(model2.ROLE_STATE_CREATE, nil)
  303. })
  304. serverproto.Handle_GAME_SSAddRoleBaseAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  305. msg := ev.Msg().(*serverproto.SSAddRoleBaseAck)
  306. util.InfoF("SSAddRoleBaseAck msg=%v", msg)
  307. role := model2.RoleMag.GetRole(cliId)
  308. if role == nil {
  309. return
  310. }
  311. if msg.Err == int32(serverproto.ErrorCode_ERROR_OK) {
  312. //数据库添加角色基础信息成功
  313. role.SwitchState(model2.ROLE_STATE_DB_ADD_ROLE_SUCCESS, nil)
  314. } else if msg.Err == int32(serverproto.ErrorCode_ERROR_ROLE_HAS_CREATE) {
  315. //已经成功创建了角色
  316. role.SwitchState(model2.ROLE_STATE_DB_ADD_ROLE_SUCCESS, nil)
  317. } else {
  318. //数据库添加角色基础信息失败
  319. role.SwitchState(model2.ROLE_STATE_DB_ADD_ROLE_FAILURE, msg.Err)
  320. if msg.Err != int32(serverproto.ErrorCode_ERROR_ROLE_ACTIVECODE_ERROR) &&
  321. msg.Err != int32(serverproto.ErrorCode_ERROR_ROLE_ACTIVECODE_USED) {
  322. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  323. }
  324. }
  325. })
  326. serverproto.Handle_GAME_SSGetServerPayMailAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  327. msg := ev.Msg().(*serverproto.SSGetServerPayMailAck)
  328. util.InfoF("SSGetServerPayMailAck msg=%v", msg)
  329. role := model2.RoleMag.GetRole(cliId)
  330. if role == nil {
  331. return
  332. }
  333. if !msg.IsTrue {
  334. role.(*model2.Role).GetRoleMail().AddMail(0, serverproto.MailType_MailType_System,
  335. map[int32]int32{}, []int32{}, "Exciting Events", "Dear players, thank you for your support and passion for our game. For more exciting events and recharge discounts, please check our official community! \nEvent link:https://i.dze-game.com/recharge_center")
  336. }
  337. })
  338. serverproto.Handle_GAME_SSGetRoleAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  339. msg := ev.Msg().(*serverproto.SSGetRoleAck)
  340. role := model2.RoleMag.GetRole(cliId)
  341. if role == nil {
  342. return
  343. }
  344. if msg.Err != int32(serverproto.ErrorCode_ERROR_OK) {
  345. util.InfoF("SSGetRoleAck cliid=%v err=%v", cliId, msg.Err)
  346. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  347. role.KickNotSave(msg.Err)
  348. return
  349. }
  350. //be baned by webgm
  351. if msg.Role != nil && msg.Role.RoleBase.BanTime > uint64(util.GetTimeSeconds()) {
  352. //if msg.Role != nil && msg.Role.RoleBase.BanTime > 0 {
  353. util.InfoF("SSGetRoleAck cliId=%v err=%v baned", cliId, msg.Err)
  354. //role.LoginAck(serverproto.ErrorCode_ERROR_ROLE_BANED)
  355. //role.KickNotSave(msg.Err)
  356. delTime := msg.Role.RoleBase.BanTime - uint64(util.GetTimeSeconds())
  357. retCode := role.(*model2.Role).GetRoleStatistic().GetCheatErrorCode(msg.Role.RoleBase.BanType)
  358. role.LoginAck(serverproto.ErrorCode(retCode))
  359. role.(*model2.Role).KickWithSaveAndBan(retCode, delTime)
  360. //role.LoginAck(serverproto.ErrorCode_ERROR_ROLE_BANED)
  361. //role.(*model2.Role).KickWithSaveAndBan(int32(serverproto.ErrorCode_ERROR_ROLE_BANED), delTime)
  362. return
  363. }
  364. //加载用户数据(role中包括了各个模块的数据加载)
  365. if err := role.Load(msg.Role); err != nil {
  366. util.ErrorF("SSGetRoleAck cliid=%v err=%v", cliId, err)
  367. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  368. role.KickNotSave(msg.Err)
  369. return
  370. } else {
  371. //完成登陆流程(专门的协议处理加载完成事件)
  372. //role.SwitchState(int32(model2.ROLE_STATE_ONLINE), nil)
  373. }
  374. })
  375. //加载角色数据完成
  376. serverproto.Handle_GAME_SSGetRoleFinishNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  377. msg := ev.Msg().(*serverproto.SSGetRoleFinishNtf)
  378. role := model2.RoleMag.GetRole(cliId)
  379. if role == nil {
  380. return
  381. }
  382. util.InfoF("uid=%v SSGetRoleFinishNtf msg=%v,state=%v", role.GetUUid(), msg, role.GetState())
  383. //其他系统加载数据时已经对玩家做了踢出操作,这边就不再设置成在线状态
  384. if role.GetState() != model2.ROLE_STATE_ZOMBIE {
  385. //完成登陆流程
  386. role.LoginAck(serverproto.ErrorCode_ERROR_OK)
  387. role.SwitchState(int32(model2.ROLE_STATE_ONLINE), true)
  388. }
  389. })
  390. //加载竞技场数据
  391. serverproto.Handle_GAME_SSLoadArenaNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  392. msg := ev.Msg().(*serverproto.SSLoadArenaNtf)
  393. //util.DebugF("SSLoadArenaNtf msg:%v", msg)
  394. role := model2.RoleMag.GetRole(cliId)
  395. if role == nil {
  396. return
  397. }
  398. if err := role.LoadOther(msg); err != nil {
  399. util.ErrorF("uid=%v SSLoadArenaNtf err=%v", role.GetUUid(), err)
  400. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  401. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  402. return
  403. }
  404. })
  405. ////加载邮件数据通知 from db
  406. //serverproto.Handle_GAME_SSLoadMailNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  407. // msg := ev.Msg().(*serverproto.SSLoadMailNtf)
  408. // util.DebugF("SSLoadMailNtf msg:%v", msg)
  409. //
  410. // role := model2.RoleMag.GetRole(cliId)
  411. // if role == nil {
  412. // return
  413. // }
  414. //
  415. // if err := role.LoadOther(msg); err != nil {
  416. // util.ErrorF("uid=%v SSLoadMailAck err=%v", role.GetUUid(), err)
  417. // role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  418. // role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  419. // return
  420. // }
  421. //})
  422. //加载好友系统数据
  423. serverproto.Handle_GAME_SSLoadFriendDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  424. msg := ev.Msg().(*serverproto.SSLoadFriendDataNtf)
  425. util.DebugF("SSLoadFriendDataNtf msg=%v", msg)
  426. role := model2.RoleMag.GetRole(cliId)
  427. if role == nil {
  428. return
  429. }
  430. if err := role.LoadOther(msg); err != nil {
  431. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  432. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  433. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  434. return
  435. }
  436. })
  437. //加载宠物系统数据
  438. serverproto.Handle_GAME_SSLoadPetNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  439. msg := ev.Msg().(*serverproto.SSLoadPetNtf)
  440. role := model2.RoleMag.GetRole(cliId)
  441. if role == nil {
  442. return
  443. }
  444. util.DebugF("uid=%v SSLoadPetNtf petLen=%v", role.GetUUid(), len(msg.Pet.PetList))
  445. if err := role.LoadOther(msg); err != nil {
  446. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  447. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  448. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  449. return
  450. }
  451. })
  452. //加载invitation系统数据
  453. serverproto.Handle_GAME_SSLoadInvitationDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  454. msg := ev.Msg().(*serverproto.SSLoadInvitationDataNtf)
  455. role := model2.RoleMag.GetRole(cliId)
  456. if role == nil {
  457. return
  458. }
  459. //util.DebugF("uid=%v SSLoadInvitationDataNtf msg=%v", role.GetUUid(), msg)
  460. if err := role.LoadOther(msg); err != nil {
  461. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  462. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  463. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  464. return
  465. }
  466. })
  467. //加载跨服数据
  468. serverproto.Handle_GAME_SSLoadCrossDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  469. msg := ev.Msg().(*serverproto.SSLoadCrossDataNtf)
  470. role := model2.RoleMag.GetRole(cliId)
  471. if role == nil {
  472. return
  473. }
  474. util.DebugF("uid=%v SSLoadCrossDataNtf msg=%v", role.GetUUid(), msg)
  475. if err := role.LoadOther(msg); err != nil {
  476. util.ErrorF("uid=%v SSLoadCrossDataNtf err=%v", role.GetUUid(), err)
  477. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  478. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  479. return
  480. }
  481. })
  482. }