websocket.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gorilla/websocket"
  5. "message-pusher/channel"
  6. "message-pusher/model"
  7. "net/http"
  8. )
  9. var upgrader = websocket.Upgrader{
  10. ReadBufferSize: 1024,
  11. WriteBufferSize: 1024,
  12. CheckOrigin: func(r *http.Request) bool {
  13. return true
  14. },
  15. }
  16. func RegisterClient(c *gin.Context) {
  17. secret := c.Query("secret")
  18. if secret == "" {
  19. c.JSON(http.StatusOK, gin.H{
  20. "success": false,
  21. "message": "secret 为空",
  22. })
  23. return
  24. }
  25. user := model.User{Username: c.Param("username")}
  26. err := user.FillUserByUsername()
  27. if err != nil {
  28. c.JSON(http.StatusOK, gin.H{
  29. "success": false,
  30. "message": "无效的用户名",
  31. })
  32. return
  33. }
  34. channelName := c.Query("channel")
  35. if channelName == "" {
  36. channelName = "client"
  37. }
  38. channel_, err := model.GetChannelByName(channelName, user.Id)
  39. if err != nil {
  40. c.JSON(http.StatusOK, gin.H{
  41. "success": false,
  42. "message": "无效的通道名称",
  43. })
  44. return
  45. }
  46. if secret != channel_.Secret {
  47. c.JSON(http.StatusOK, gin.H{
  48. "success": false,
  49. "message": "通道名称与密钥不匹配",
  50. })
  51. return
  52. }
  53. conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
  54. if err != nil {
  55. c.JSON(http.StatusOK, gin.H{
  56. "success": false,
  57. "message": err.Error(),
  58. })
  59. return
  60. }
  61. channel.RegisterClient(channelName, user.Id, conn)
  62. return
  63. }