customer/internal/interface/sse/service.go

57 lines
1.3 KiB
Go
Raw Normal View History

2025-06-25 14:06:25 +00:00
package sse
import (
"fmt"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
type SSEService struct {
dispatcher *ConnectionDispatcher
producer *SSEProducer
consumer *SSEConsumer
logger *zap.Logger
}
func NewSSEService(redisAddr string, bufferSize int, logger *zap.Logger) (*SSEService, error) {
dispatcher := NewConnectionDispatcher(bufferSize)
producer, err := NewSSEProducer(redisAddr)
if err != nil {
return nil, fmt.Errorf("failed to create producer: %w", err)
}
consumer, err := NewSSEConsumer(redisAddr, dispatcher)
if err != nil {
return nil, fmt.Errorf("failed to create consumer: %w", err)
}
service := &SSEService{
dispatcher: dispatcher,
producer: producer,
consumer: consumer,
logger: logger,
}
return service, nil
}
func (s *SSEService) Start() {
s.consumer.Start()
}
func (s *SSEService) Stop() {
s.consumer.Stop()
s.producer.Stop()
}
// для отправителей - допустим вотчер монги исал бы сюда
func (s *SSEService) SendEvent(userID, eventType string, data interface{}) error {
return s.producer.SendEvent(userID, eventType, data)
}
// todo для тех кто потребляет контент
func (s *SSEService) HandleSSEConnection(ctx *fiber.Ctx, userID, deviceID string) error {
return nil
}