room.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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 CreateRoomReq struct {
  18. Passwd string `json:"passwd"`
  19. Name string `json:"name"`
  20. BaseAmount int `json:"base_amount"`
  21. RoomType int32 `json:"room_type"`
  22. }
  23. func Join(req api.PerformReq) error {
  24. var err error
  25. userModel := req.UserModel
  26. joinRoomReq := JoinRoomReq{}
  27. err = json.Unmarshal(req.Msg, &joinRoomReq)
  28. if err != nil {
  29. logrus.Error(err)
  30. return err
  31. }
  32. gameInstance := gameQZ.GetInstance()
  33. gameInstance.Join(int32(userModel.ID))
  34. err = gameInstance.ChooseChair(int32(userModel.ID), int32(joinRoomReq.RoomID),
  35. int32(joinRoomReq.ChairID), joinRoomReq.Passwd, true)
  36. if err != nil {
  37. logrus.Error(err)
  38. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  39. return err
  40. }
  41. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  42. return nil
  43. }
  44. func RndJoin(req api.PerformReq) error {
  45. userModel := req.UserModel
  46. gameInstance := gameQZ.GetInstance()
  47. gameInstance.Join(int32(userModel.ID))
  48. err := gameInstance.ChooseRndChair(int32(userModel.ID))
  49. if err != nil {
  50. logrus.Error(err)
  51. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  52. return err
  53. }
  54. nxd.SuccessResponse(req.Once, uint32(userModel.ID), nil)
  55. return nil
  56. }
  57. func Leave(req api.PerformReq) error {
  58. userModel := req.UserModel
  59. gameInstance := gameQZ.GetInstance()
  60. err := gameInstance.ChooseChair(int32(userModel.ID), 0, 0, "", true)
  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 Create(req api.PerformReq) error {
  70. var err error
  71. userModel := req.UserModel
  72. createRoomReq := CreateRoomReq{}
  73. err = json.Unmarshal(req.Msg, &createRoomReq)
  74. if err != nil {
  75. logrus.Error(err)
  76. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  77. return err
  78. }
  79. if createRoomReq.BaseAmount == 0 {
  80. createRoomReq.BaseAmount = 3
  81. }
  82. createRoomReq.Name = strings.TrimSpace(createRoomReq.Name)
  83. if createRoomReq.Name == "" {
  84. nxd.FailedResponse(req.Once, uint32(userModel.ID), "名称不能为空")
  85. return errors.New("名称不能为空")
  86. }
  87. gameInstance := gameQZ.GetInstance()
  88. room, err := gameInstance.CreateRoom(int32(userModel.ID), createRoomReq.RoomType, createRoomReq.Passwd,
  89. createRoomReq.Name, createRoomReq.BaseAmount)
  90. if err != nil {
  91. logrus.Error(err)
  92. nxd.FailedResponse(req.Once, uint32(userModel.ID), err.Error())
  93. return err
  94. }
  95. nxd.SuccessResponse(req.Once, uint32(userModel.ID), &gameproto.Room{
  96. ID: uint32(room.ID),
  97. Name: createRoomReq.Name,
  98. RoomType: gameproto.RoomType(room.RoomType),
  99. BaseAmount: float64(room.BaseAmount.IntPart()),
  100. ChairUserID1: uint32(room.ChairList[0].PlayerID),
  101. ChairUserID2: uint32(room.ChairList[1].PlayerID),
  102. ChairUserID3: uint32(room.ChairList[2].PlayerID),
  103. ChairUserID4: uint32(room.ChairList[3].PlayerID),
  104. ChairUserID5: uint32(room.ChairList[4].PlayerID),
  105. })
  106. return nil
  107. }