rest.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package rest_websocket
  2. import (
  3. "log"
  4. "net/http"
  5. "git.ali33.ru/fcg-xvii/rest"
  6. "github.com/gorilla/websocket"
  7. )
  8. func New(app rest.IApplicationStream, core any) *Rest {
  9. return &Rest{
  10. upgrader: &websocket.Upgrader{
  11. ReadBufferSize: 1024,
  12. WriteBufferSize: 1024,
  13. CheckOrigin: func(r *http.Request) bool {
  14. // Проверьте ориджин здесь, и верните true, если он разрешен.
  15. //return r.Header.Get("Origin") == "http://example.com"
  16. return true
  17. },
  18. },
  19. appConf: &appConfig{
  20. app: app,
  21. core: core,
  22. },
  23. }
  24. }
  25. type Rest struct {
  26. upgrader *websocket.Upgrader
  27. appConf *appConfig
  28. server rest.IServer
  29. }
  30. func (s *Rest) Prepare(server rest.IServer, httpPrefix string) {
  31. s.appConf.ctx = server.Context()
  32. s.appConf.tokenGenerator = server.TokenGenerate
  33. s.appConf.tokenParser = server.TokenParse
  34. server.HandleFunc(httpPrefix, s.handle)
  35. s.server = server
  36. }
  37. func (s *Rest) handle(w http.ResponseWriter, r *http.Request) {
  38. // Преобразование HTTP соединения в WebSocket соединение
  39. ws, err := s.upgrader.Upgrade(w, r, nil)
  40. if err != nil {
  41. log.Println(err)
  42. }
  43. socket := NewSocketServer(
  44. NewSocket(ws, true),
  45. s.appConf,
  46. )
  47. s.appConf.app.Connect() <- socket
  48. }