handler.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package internal
  2. import (
  3. "reflect"
  4. redismgr "server/db/redis"
  5. "server/game/ludo"
  6. "server/msg"
  7. "github.com/name5566/leaf/gate"
  8. "github.com/name5566/leaf/log"
  9. )
  10. func handleMsg(m interface{}, h interface{}) {
  11. skeleton.RegisterChanRPC(reflect.TypeOf(m), h)
  12. }
  13. // 大厅有进入大厅,离开大厅,加入房间,玩法列表,商城
  14. func init() {
  15. handleMsg(&msg.EnterHall{}, enterHall)
  16. handleMsg(&msg.LeaveHall{}, leaveHall)
  17. }
  18. func enterHall(args []interface{}) {
  19. m := args[0].(*msg.EnterHall)
  20. a := args[1].(gate.Agent)
  21. _, err_info := redismgr.GetUserInfoFromRedis(m.UserId)
  22. if err_info != nil {
  23. a.WriteMsg(&msg.ResEnterHall{
  24. Success: false,
  25. ErrMsg: &msg.MsgError{
  26. ErrorCode: 101,
  27. ErrorMsg: "not find user",
  28. },
  29. })
  30. return
  31. }
  32. ud := a.UserData()
  33. room_id := ud.(*msg.UserInfo).RoomId
  34. var user_room *msg.RoomInfo = nil
  35. //如果玩家在某个游戏里,就进行重连
  36. if room_id != 0 {
  37. //暂时就一个ludo游戏
  38. wrapper := ludo.GetBattleRoomById(room_id)
  39. if wrapper != nil {
  40. wrapper.OptTime = wrapper.Get_cur_color_opt_time()
  41. user_room = wrapper.RoomInfo
  42. } else {
  43. redismgr.SaveUserInfoToRedis(&msg.UserInfo{
  44. UserId: ud.(*msg.UserInfo).UserId,
  45. Name: ud.(*msg.UserInfo).Name,
  46. MCoin: ud.(*msg.UserInfo).MCoin,
  47. MHead: ud.(*msg.UserInfo).MHead,
  48. RoomId: ud.(*msg.UserInfo).RoomId,
  49. })
  50. }
  51. //进行重连逻辑
  52. }
  53. a.WriteMsg(&msg.ResEnterHall{
  54. Success: true,
  55. ErrMsg: nil,
  56. ReconnectRoomInfo: user_room,
  57. })
  58. log.Debug("enterHallHandler, msg: %v, agent: %v", m, a)
  59. }
  60. func leaveHall(args []interface{}) {
  61. m := args[0].(*msg.LeaveHall)
  62. a := args[1].(gate.Agent)
  63. log.Debug("leaveHallHandler, msg: %v, agent: %v", m, a)
  64. }