server_router.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package main
  2. import (
  3. "git.wanbits.io/joe/franklin/mod"
  4. pb "git.wanbits.io/joe/franklin/protos"
  5. "git.wanbits.io/joe/nnet"
  6. "github.com/golang/protobuf/proto"
  7. "time"
  8. )
  9. var (
  10. routes = map[string]fnCSHandler{
  11. "C_Heartbeat": on_C_Heartbeat,
  12. "C_Login": on_C_Login,
  13. "C_Logout": on_C_Logout,
  14. "C_EnterGame": on_C_EnterGame,
  15. "C_LeaveGame": on_C_LeaveGame,
  16. "C_EnterRoom": on_C_EnterRoom,
  17. "C_EnterTable": on_C_EnterTable,
  18. "C_LeaveRoom": on_C_LeaveRoom,
  19. "C_LeaveTable": on_C_LeaveTable,
  20. }
  21. )
  22. type fnCSHandler func(nnet.ISession, *CSPacket)
  23. func dispatch(ses nnet.ISession, pkt *CSPacket) {
  24. handler, ok := routes[pkt.MsgName]
  25. if !ok {
  26. return
  27. }
  28. handler(ses, pkt)
  29. }
  30. func on_C_Heartbeat(ses nnet.ISession, p *CSPacket) {
  31. resp := &pb.S_Heartbeat{
  32. Ts: time.Now().Unix(),
  33. }
  34. SendToClient(ses, ses.Id(), pb.ErrCode_OK, resp)
  35. }
  36. func on_C_Login(ses nnet.ISession, p *CSPacket) {
  37. prm := &pb.C_Login{}
  38. ses.SetId(p.UserId)
  39. err := proto.Unmarshal(p.Req, prm)
  40. if err != nil {
  41. response_c_login(ses, pb.ErrCode_BAD_FORMAT, nil)
  42. return
  43. }
  44. // verify by rabbit
  45. seq := time.Now().UnixNano()
  46. err = g_rabbitProto.Send(NewReqPacket("bl_login_verify", seq, &pb.VerifyParams{
  47. UserId: p.UserId,
  48. Username: prm.Username,
  49. Token: prm.Token,
  50. }), ses)
  51. if err != nil {
  52. response_c_login(ses, pb.ErrCode_FAILED, nil)
  53. }
  54. }
  55. func response_c_login(ses nnet.ISession, errCode pb.ErrCode, res *pb.S_Login) {
  56. var ec = pb.ErrCode_OK
  57. var reason = pb.NetCloseReason_KICK
  58. defer func() {
  59. p := []int32{}
  60. if ec != pb.ErrCode_OK {
  61. p = append(p, 1)
  62. p = append(p, int32(reason))
  63. res = &pb.S_Login{}
  64. //SendToClient(ses, ses.Id(), ec, &pb.S_Login{})
  65. //KillUserSession(ses, ses.Id(), pb.NetCloseReason_ERR_AUTH)
  66. }
  67. SendToClient(ses, ses.Id(), ec, res, p...)
  68. }()
  69. if errCode != pb.ErrCode_OK {
  70. ec = errCode
  71. reason = pb.NetCloseReason_ERR_AUTH
  72. return
  73. }
  74. // check agent offline
  75. if g_offline {
  76. ec = pb.ErrCode_MAINTAINING
  77. reason = pb.NetCloseReason_KICK
  78. return
  79. }
  80. // check user status
  81. // check user kicked off
  82. if mod.LoadKick(ses.Id()) {
  83. ec = pb.ErrCode_FORBIDDEN
  84. reason = pb.NetCloseReason_KICK
  85. return
  86. }
  87. // check if have logged in any agents already
  88. // check reconnect state
  89. // route to a lobby
  90. // update user location
  91. // update session id
  92. ses.UpdateId(ses.Id())
  93. }
  94. func on_C_Logout(ses nnet.ISession, p *CSPacket) {
  95. //
  96. }
  97. func on_C_EnterGame(ses nnet.ISession, p *CSPacket) {
  98. }
  99. func on_C_LeaveGame(ses nnet.ISession, p *CSPacket) {
  100. }
  101. func on_C_EnterRoom(ses nnet.ISession, p *CSPacket) {
  102. }
  103. func on_C_EnterTable(ses nnet.ISession, p *CSPacket) {
  104. }
  105. func on_C_LeaveRoom(ses nnet.ISession, p *CSPacket) {
  106. }
  107. func on_C_LeaveTable(ses nnet.ISession, p *CSPacket) {
  108. }