ss_msg.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package model
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. model2 "roserver/baseserver/model"
  6. "roserver/serverproto"
  7. )
  8. func init() {
  9. serverproto.Handle_GATE_SSUserKickNtf = func(ev rocommon.ProcEvent) {
  10. msg := ev.Msg().(*serverproto.SSUserKickNtf)
  11. cliSess := model2.GetClientSession(msg.ClientId)
  12. if cliSess == nil {
  13. return
  14. }
  15. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) ||
  16. msg.Error == int32(serverproto.ErrorCode_ERROR_FAIL) {
  17. cliSess.(rocommon.ContextSet).SetContextData("user", nil, "SSUserKickNtf")
  18. cliSess.Close()
  19. } else {
  20. //发送踢人消息给客户端,客户端关闭连接
  21. ntfMsg := &serverproto.SCKickOutNtf{
  22. Error: msg.Error,
  23. BanEndTime: msg.BanEndTime,
  24. }
  25. cliSess.Send(ntfMsg)
  26. cliSess.(rocommon.ContextSet).SetContextData("user", nil, "SSUserKickNtf")
  27. //cliSess.Close()
  28. }
  29. }
  30. //登录成功时,返回给gate服务器,用来处理连接超时设置
  31. serverproto.Handle_GATE_SCLoginAck = func(ev rocommon.ProcEvent) {
  32. msg := ev.Msg().(*serverproto.SCLoginAck)
  33. cliSess := model2.GetClientSession(msg.ClientId)
  34. if cliSess == nil {
  35. return
  36. }
  37. msg.ClientId = 0
  38. if msg.Error != int32(serverproto.ErrorCode_ERROR_OK) && msg.Error != 8888 {
  39. cliUser := model2.Session2User(cliSess)
  40. cliUser.RemoveConnected()
  41. }
  42. cliSess.SetSessionOptFlag(true)
  43. cliSess.Send(msg)
  44. }
  45. //auth验证成功通知gate,并绑定game服务器节点SSUserKickNtf
  46. serverproto.Handle_GATE_SSLoginNtf = func(ev rocommon.ProcEvent) {
  47. msg := ev.Msg().(*serverproto.SSLoginNtf)
  48. //util.DebugF("SSLoginNtf from auth msg=%v", msg)
  49. cliSess := model2.GetClientSession(msg.ClientId)
  50. if cliSess == nil {
  51. return
  52. }
  53. msgId := LoginReqMsgId
  54. cliUser, ret := model2.BindClientToBackend(msg.ConnInfo.LogicNode, cliSess)
  55. util.DebugF("SSLoginNtf from auth msg openid=%v msg=%v ret=%v", cliUser.OpenId, msg, ret)
  56. if ret {
  57. err := cliUser.ClientDirect2Backend(msg.ConnInfo.LogicNode, msgId, 0, cliUser.LoginData, model2.SERVICE_NODE_TYPE_GAME_STR)
  58. if err != nil {
  59. util.WarnF("SSLoginNtf bind game node err=%v", err)
  60. }
  61. //登陆成功发送保存连接信息到auth
  62. saveMsg := &serverproto.SSSaveUserConnectInfo{
  63. OpenId: cliUser.OpenId,
  64. Platform: cliUser.Platform,
  65. ConnInfo: msg.ConnInfo,
  66. SdkJson: msg.SdkParam,
  67. }
  68. saveMsg.ConnInfo.TimeStamp = util.GetTimeSeconds()
  69. err = cliUser.Client2Backend(model2.SERVICE_NODE_TYPE_AUTH_STR, saveMsg)
  70. if err != nil {
  71. util.ErrorF("[SSLoginNtf] send to auth err=%v", err)
  72. }
  73. } else {
  74. //重新选择game节点
  75. gameNodeStr, _ := model2.GetServiceNodeAndSession("", model2.SERVICE_NODE_TYPE_GAME_STR, msg.ClientId>>32)
  76. //gameNodeStr := model2.SelectServiceNode(model2.SERVICE_NODE_TYPE_GAME_STR, msg.ClientId>>32)
  77. util.WarnF("[SSLoginNtf] bind game node id=%v sid=%v nodeStr=%v", ev.Session().ID(), msg.ClientId>>32, gameNodeStr)
  78. cliUser, ret = model2.BindClientToBackend(gameNodeStr, cliSess)
  79. if ret {
  80. err := cliUser.ClientDirect2Backend(gameNodeStr, msgId, 0, cliUser.LoginData, model2.SERVICE_NODE_TYPE_GAME_STR)
  81. if err != nil {
  82. util.WarnF("[SSLoginNtf] bind game node err=%v", err)
  83. }
  84. } else {
  85. util.ErrorF("[SSLoginNtf] no game node can use !!!")
  86. ackMsg := &serverproto.SCLoginAck{Error: int32(serverproto.ErrorCode_ERROR_SERVER_ERROR)}
  87. cliSess.Send(ackMsg)
  88. cliSess.(rocommon.ContextSet).SetContextData("user", nil, "SSLoginNtf:Failed")
  89. cliSess.Close()
  90. return
  91. }
  92. //登陆成功发送保存连接信息到auth
  93. saveMsg := &serverproto.SSSaveUserConnectInfo{
  94. OpenId: cliUser.OpenId,
  95. Platform: cliUser.Platform,
  96. ConnInfo: msg.ConnInfo,
  97. SdkJson: msg.SdkParam,
  98. }
  99. saveMsg.ConnInfo.TimeStamp = util.GetTimeSeconds()
  100. saveMsg.ConnInfo.LogicNode = gameNodeStr
  101. err := cliUser.Client2Backend(model2.SERVICE_NODE_TYPE_AUTH_STR, saveMsg)
  102. if err != nil {
  103. util.ErrorF("[SSLoginNtf] send to auth err=%v", err)
  104. }
  105. }
  106. //绑定battlerecord服务器节点
  107. battleRecordNodeStr := model2.SelectServiceNode(model2.SERVICE_NODE_TYPE_BATTLERECORD_STR, msg.ClientId>>32)
  108. if battleRecordNodeStr != "" {
  109. model2.BindClientToBackend(battleRecordNodeStr, cliSess)
  110. }
  111. }
  112. }