login_msg.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  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_SSGetRoleAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  327. msg := ev.Msg().(*serverproto.SSGetRoleAck)
  328. role := model2.RoleMag.GetRole(cliId)
  329. if role == nil {
  330. return
  331. }
  332. if msg.Err != int32(serverproto.ErrorCode_ERROR_OK) {
  333. util.InfoF("SSGetRoleAck cliid=%v err=%v", cliId, msg.Err)
  334. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  335. role.KickNotSave(msg.Err)
  336. return
  337. }
  338. //be baned by webgm
  339. if msg.Role != nil && msg.Role.RoleBase.BanTime > uint64(util.GetTimeSeconds()) {
  340. //if msg.Role != nil && msg.Role.RoleBase.BanTime > 0 {
  341. util.InfoF("SSGetRoleAck cliId=%v err=%v baned", cliId, msg.Err)
  342. //role.LoginAck(serverproto.ErrorCode_ERROR_ROLE_BANED)
  343. //role.KickNotSave(msg.Err)
  344. delTime := msg.Role.RoleBase.BanTime - uint64(util.GetTimeSeconds())
  345. retCode := role.(*model2.Role).GetRoleStatistic().GetCheatErrorCode(msg.Role.RoleBase.BanType)
  346. role.LoginAck(serverproto.ErrorCode(retCode))
  347. role.(*model2.Role).KickWithSaveAndBan(retCode, delTime)
  348. //role.LoginAck(serverproto.ErrorCode_ERROR_ROLE_BANED)
  349. //role.(*model2.Role).KickWithSaveAndBan(int32(serverproto.ErrorCode_ERROR_ROLE_BANED), delTime)
  350. return
  351. }
  352. //加载用户数据(role中包括了各个模块的数据加载)
  353. if err := role.Load(msg.Role); err != nil {
  354. util.ErrorF("SSGetRoleAck cliid=%v err=%v", cliId, err)
  355. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  356. role.KickNotSave(msg.Err)
  357. return
  358. } else {
  359. //完成登陆流程(专门的协议处理加载完成事件)
  360. //role.SwitchState(int32(model2.ROLE_STATE_ONLINE), nil)
  361. }
  362. })
  363. //加载角色数据完成
  364. serverproto.Handle_GAME_SSGetRoleFinishNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  365. msg := ev.Msg().(*serverproto.SSGetRoleFinishNtf)
  366. role := model2.RoleMag.GetRole(cliId)
  367. if role == nil {
  368. return
  369. }
  370. util.DebugF("uid=%v SSGetRoleFinishNtf msg=%v", role.GetUUid(), msg)
  371. //其他系统加载数据时已经对玩家做了踢出操作,这边就不再设置成在线状态
  372. if role.GetState() != model2.ROLE_STATE_ZOMBIE {
  373. //完成登陆流程
  374. role.LoginAck(serverproto.ErrorCode_ERROR_OK)
  375. role.SwitchState(int32(model2.ROLE_STATE_ONLINE), true)
  376. }
  377. })
  378. //加载竞技场数据
  379. serverproto.Handle_GAME_SSLoadArenaNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  380. msg := ev.Msg().(*serverproto.SSLoadArenaNtf)
  381. //util.DebugF("SSLoadArenaNtf msg:%v", msg)
  382. role := model2.RoleMag.GetRole(cliId)
  383. if role == nil {
  384. return
  385. }
  386. if err := role.LoadOther(msg); err != nil {
  387. util.ErrorF("uid=%v SSLoadArenaNtf err=%v", role.GetUUid(), err)
  388. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  389. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  390. return
  391. }
  392. })
  393. ////加载邮件数据通知 from db
  394. //serverproto.Handle_GAME_SSLoadMailNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  395. // msg := ev.Msg().(*serverproto.SSLoadMailNtf)
  396. // util.DebugF("SSLoadMailNtf msg:%v", msg)
  397. //
  398. // role := model2.RoleMag.GetRole(cliId)
  399. // if role == nil {
  400. // return
  401. // }
  402. //
  403. // if err := role.LoadOther(msg); err != nil {
  404. // util.ErrorF("uid=%v SSLoadMailAck err=%v", role.GetUUid(), err)
  405. // role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  406. // role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  407. // return
  408. // }
  409. //})
  410. //加载好友系统数据
  411. serverproto.Handle_GAME_SSLoadFriendDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  412. msg := ev.Msg().(*serverproto.SSLoadFriendDataNtf)
  413. util.DebugF("SSLoadFriendDataNtf msg=%v", msg)
  414. role := model2.RoleMag.GetRole(cliId)
  415. if role == nil {
  416. return
  417. }
  418. if err := role.LoadOther(msg); err != nil {
  419. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  420. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  421. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  422. return
  423. }
  424. })
  425. //加载宠物系统数据
  426. serverproto.Handle_GAME_SSLoadPetNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  427. msg := ev.Msg().(*serverproto.SSLoadPetNtf)
  428. role := model2.RoleMag.GetRole(cliId)
  429. if role == nil {
  430. return
  431. }
  432. util.DebugF("uid=%v SSLoadPetNtf petLen=%v", role.GetUUid(), len(msg.Pet.PetList))
  433. if err := role.LoadOther(msg); err != nil {
  434. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  435. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  436. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  437. return
  438. }
  439. })
  440. //加载invitation系统数据
  441. serverproto.Handle_GAME_SSLoadInvitationDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  442. msg := ev.Msg().(*serverproto.SSLoadInvitationDataNtf)
  443. role := model2.RoleMag.GetRole(cliId)
  444. if role == nil {
  445. return
  446. }
  447. //util.DebugF("uid=%v SSLoadInvitationDataNtf msg=%v", role.GetUUid(), msg)
  448. if err := role.LoadOther(msg); err != nil {
  449. util.ErrorF("uid=%v SSLoadFriendDataNtf err=%v", role.GetUUid(), err)
  450. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  451. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  452. return
  453. }
  454. })
  455. //加载跨服数据
  456. serverproto.Handle_GAME_SSLoadCrossDataNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  457. msg := ev.Msg().(*serverproto.SSLoadCrossDataNtf)
  458. role := model2.RoleMag.GetRole(cliId)
  459. if role == nil {
  460. return
  461. }
  462. util.DebugF("uid=%v SSLoadCrossDataNtf msg=%v", role.GetUUid(), msg)
  463. if err := role.LoadOther(msg); err != nil {
  464. util.ErrorF("uid=%v SSLoadCrossDataNtf err=%v", role.GetUUid(), err)
  465. role.LoginAck(serverproto.ErrorCode_ERROR_FAIL)
  466. role.KickNotSave(int32(serverproto.ErrorCode_ERROR_FAIL))
  467. return
  468. }
  469. })
  470. }