room.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package room
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "strings"
  6. "github.com/sirupsen/logrus"
  7. gameQZ "nn.daxia.dev/game/qznn"
  8. "nn.daxia.dev/gameproto"
  9. "nn.daxia.dev/handler/api"
  10. "nn.daxia.dev/nxd"
  11. )
  12. type JoinRoomReq struct {
  13. RoomID int32 `json:"room_id"`
  14. ChairID int32 `json:"chair_id"`
  15. Passwd string `json:"passwd"`
  16. }
  17. type RndJoinRoomReq struct {
  18. RoomType int32 `json:"room_type"` //0:积分房,1:收费房
  19. }
  20. type CreateRoomReq struct {
  21. Passwd string `json:"passwd"`
  22. Name string `json:"name"`
  23. BaseAmount int `json:"base_amount"`
  24. RoomType int32 `json:"room_type"`
  25. }
  26. func Join(req api.PerformReq) error {
  27. var err error
  28. userModel := req.UserModel
  29. joinRoomReq := JoinRoomReq{}
  30. err = json.Unmarshal(req.Msg, &joinRoomReq)
  31. if err != nil {
  32. logrus.Error(err)
  33. return err
  34. }
  35. gameInstance := gameQZ.GetInstance()
  36. gameInstance.Join(int32(userModel.ID))
  37. //指定房间加入,只能是收费房
  38. err = gameInstance.ChooseChairPayRoom(int32(userModel.ID), int32(joinRoomReq.RoomID),
  39. int32(joinRoomReq.ChairID), joinRoomReq.Passwd, true)
  40. if err != nil {
  41. logrus.Error(err)
  42. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  43. return err
  44. }
  45. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  46. return nil
  47. }
  48. func RndJoin(req api.PerformReq) error {
  49. var err error
  50. userModel := req.UserModel
  51. rndJoinRoomReq := RndJoinRoomReq{}
  52. err = json.Unmarshal(req.Msg, &rndJoinRoomReq)
  53. if err != nil {
  54. logrus.Error(err)
  55. return err
  56. }
  57. gameInstance := gameQZ.GetInstance()
  58. gameInstance.Join(int32(userModel.ID))
  59. //按类型来随机加入房间
  60. err = gameInstance.ChooseRndChair(int32(userModel.ID), rndJoinRoomReq.RoomType)
  61. if err != nil {
  62. logrus.Error(err)
  63. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  64. return err
  65. }
  66. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  67. return nil
  68. }
  69. func Leave(req api.PerformReq) error {
  70. userModel := req.UserModel
  71. gameInstance := gameQZ.GetInstance()
  72. err := gameInstance.LeaveRoom(int32(userModel.ID))
  73. if err != nil {
  74. logrus.Error(err)
  75. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  76. return err
  77. }
  78. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  79. return nil
  80. }
  81. func Create(req api.PerformReq) error {
  82. var err error
  83. userModel := req.UserModel
  84. createRoomReq := CreateRoomReq{}
  85. err = json.Unmarshal(req.Msg, &createRoomReq)
  86. if err != nil {
  87. logrus.Error(err)
  88. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  89. return err
  90. }
  91. if createRoomReq.BaseAmount == 0 {
  92. createRoomReq.BaseAmount = 3
  93. }
  94. createRoomReq.Name = strings.TrimSpace(createRoomReq.Name)
  95. if createRoomReq.Name == "" {
  96. nxd.FailedResponse(req.Once, uint32(userModel.ID), "名称不能为空")
  97. return errors.New("名称不能为空")
  98. }
  99. gameInstance := gameQZ.GetInstance()
  100. room, err := gameInstance.CreateRoom(int32(userModel.ID), createRoomReq.RoomType, createRoomReq.Passwd,
  101. createRoomReq.Name, createRoomReq.BaseAmount)
  102. if err != nil {
  103. logrus.Error(err)
  104. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  105. return err
  106. }
  107. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.Room{
  108. ID: uint32(room.ID),
  109. Name: createRoomReq.Name,
  110. RoomType: gameproto.RoomType(room.RoomType),
  111. BaseAmount: float64(room.BaseAmount.IntPart()),
  112. ChairUserID1: uint32(room.ChairList[0].PlayerID),
  113. ChairUserID2: uint32(room.ChairList[1].PlayerID),
  114. ChairUserID3: uint32(room.ChairList[2].PlayerID),
  115. ChairUserID4: uint32(room.ChairList[3].PlayerID),
  116. ChairUserID5: uint32(room.ChairList[4].PlayerID),
  117. })
  118. return nil
  119. }