rest.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. server.HandleFunc(httpPrefix, s.handle)
  34. s.server = server
  35. }
  36. func (s *Rest) handle(w http.ResponseWriter, r *http.Request) {
  37. // Преобразование HTTP соединения в WebSocket соединение
  38. ws, err := s.upgrader.Upgrade(w, r, nil)
  39. if err != nil {
  40. log.Println(err)
  41. }
  42. socket := NewSocketServer(
  43. NewSocket(ws, true),
  44. s.appConf,
  45. )
  46. s.appConf.app.Connect() <- socket
  47. }