rest.go 985 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. },
  14. appConf: &appConfig{
  15. app: app,
  16. core: core,
  17. },
  18. }
  19. }
  20. type Rest struct {
  21. upgrader *websocket.Upgrader
  22. appConf *appConfig
  23. server rest.IServer
  24. }
  25. func (s *Rest) Prepare(server rest.IServer, httpPrefix string) {
  26. s.appConf.ctx = server.Context()
  27. s.appConf.tokenGenerator = server.TokenGenerate
  28. server.HandleFunc(httpPrefix, s.handle)
  29. s.server = server
  30. }
  31. func (s *Rest) handle(w http.ResponseWriter, r *http.Request) {
  32. // Преобразование HTTP соединения в WebSocket соединение
  33. ws, err := s.upgrader.Upgrade(w, r, nil)
  34. if err != nil {
  35. log.Println(err)
  36. }
  37. socket := NewSocketServer(
  38. NewSocket(ws),
  39. s.appConf,
  40. )
  41. s.appConf.app.Connect() <- socket
  42. }