websocket.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
  2. // See LICENSE.txt for license information.
  3. package api4
  4. import (
  5. "net/http"
  6. "github.com/gorilla/websocket"
  7. "github.com/mattermost/mattermost-server/v5/mlog"
  8. "github.com/mattermost/mattermost-server/v5/model"
  9. )
  10. func (api *API) InitWebSocket() {
  11. // Optionally supports a trailing slash
  12. api.BaseRoutes.ApiRoot.Handle("/{websocket:websocket(?:\\/)?}", api.ApiHandlerTrustRequester(connectWebSocket)).Methods("GET")
  13. }
  14. func connectWebSocket(c *Context, w http.ResponseWriter, r *http.Request) {
  15. upgrader := websocket.Upgrader{
  16. ReadBufferSize: model.SOCKET_MAX_MESSAGE_SIZE_KB,
  17. WriteBufferSize: model.SOCKET_MAX_MESSAGE_SIZE_KB,
  18. CheckOrigin: c.App.OriginChecker(),
  19. }
  20. ws, err := upgrader.Upgrade(w, r, nil)
  21. if err != nil {
  22. mlog.Error("websocket connect err.", mlog.Err(err))
  23. c.Err = model.NewAppError("connect", "api.web_socket.connect.upgrade.app_error", nil, "", http.StatusInternalServerError)
  24. return
  25. }
  26. wc := c.App.NewWebConn(ws, *c.App.Session(), c.App.T, "")
  27. if len(c.App.Session().UserId) > 0 {
  28. c.App.HubRegister(wc)
  29. }
  30. wc.Pump()
  31. }