diff --git a/internal/http/graph/messages_resolvers.go b/internal/http/graph/messages_resolvers.go index b655919..dbedac2 100644 --- a/internal/http/graph/messages_resolvers.go +++ b/internal/http/graph/messages_resolvers.go @@ -3,8 +3,6 @@ package graph import ( "context" "fmt" - "log" - "math" "tailly_back_v2/internal/domain" "tailly_back_v2/proto" "time" @@ -122,48 +120,25 @@ func (r *queryResolver) GetUserChats(ctx context.Context, userID int) ([]*domain // MessageStream реализация подписки на новые сообщения func (r *subscriptionResolver) MessageStream(ctx context.Context, userID int) (<-chan *domain.Message, error) { - messageChan := make(chan *domain.Message) + stream, err := r.MessageClient.StreamMessages(ctx, &proto.StreamMessagesRequest{ + UserId: int32(userID), + }) + if err != nil { + return nil, fmt.Errorf("failed to stream messages: %w", err) + } + messageChan := make(chan *domain.Message) go func() { defer close(messageChan) - - retryDelay := time.Second - for { - // Создаем новый контекст с таймаутом - streamCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - - stream, err := r.MessageClient.StreamMessages(streamCtx, &proto.StreamMessagesRequest{ - UserId: int32(userID), - }) - + msg, err := stream.Recv() if err != nil { - cancel() - log.Printf("Failed to stream messages: %v", err) - - select { - case <-ctx.Done(): - return - case <-time.After(retryDelay): - retryDelay = time.Duration(math.Min(float64(retryDelay*2), float64(30*time.Second))) - continue - } + return } - - for { - msg, err := stream.Recv() - if err != nil { - cancel() - log.Printf("Stream receive error: %v", err) - break - } - - select { - case <-ctx.Done(): - cancel() - return - case messageChan <- protoMessageToDomain(msg.Message): - } + select { + case <-ctx.Done(): + return + case messageChan <- protoMessageToDomain(msg.Message): } } }() diff --git a/internal/http/server.go b/internal/http/server.go index e360098..943548e 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -17,7 +17,6 @@ import ( "tailly_back_v2/internal/http/middleware" "tailly_back_v2/internal/service" "tailly_back_v2/pkg/auth" - "time" ) type Server struct { @@ -85,7 +84,6 @@ func (s *Server) configureRouter() { return false }, }, - KeepAlivePingInterval: 10 * time.Second, } srv.AddTransport(&wsTransport)