login_msg.go 18 KB

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