diff --git a/docker-compose.yml b/docker-compose.yml index 5b71cfa..3cf6df1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: dockerfile: Dockerfile image: your-app-image:latest command: ["/app"] + pull_policy: build ports: - "3000:3000" environment: @@ -22,10 +23,3 @@ services: - SPOTIFY_CLIENT_SECRET=$SPOTIFY_CLIENT_SECRET - SPOTIFY_REFRESH_TOKEN=$SPOTIFY_REFRESH_TOKEN - STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY - labels: - - "traefik.enable=true" - - "traefik.http.routers.site.rule=Host(`atri.dad`)" - - "traefik.http.routers.site.service=site" - - "traefik.http.routers.site.entrypoints=websecure" - - "traefik.http.routers.site.tls.certresolver=letsencrypt" - - "traefik.http.services.site.loadbalancer.server.port=3000" diff --git a/lib/sse.go b/lib/sse.go index 52a07af..5b6e8eb 100644 --- a/lib/sse.go +++ b/lib/sse.go @@ -99,27 +99,34 @@ func HandleIncomingMessages(c echo.Context, pubsub pubsub.PubSubMessage, client var mutex sync.Mutex for { + // Receive messages using the context of the request, which is cancelled when the client disconnects msg, err := pubsub.ReceiveMessage(c.Request().Context()) if err != nil { if err == context.Canceled { - // The client has disconnected. Stop trying to send messages. + // Log when the client disconnects and stop the message forwarding + LogInfo.Printf("Client disconnected, stopping message forwarding") return } + // Log errors other than client disconnection LogError.Printf("Failed to receive message: %v", err) return } + // Prepare the data string to be sent as an SSE data := fmt.Sprintf("data: %s\n\n", msg.Payload) + // Locking before writing to the response writer to avoid concurrent write issues mutex.Lock() if c.Response().Writer != nil { _, err := c.Response().Write([]byte(data)) if err != nil { + // Log failure to write and unlock before returning LogError.Printf("Failed to write message: %v", err) mutex.Unlock() return } + // Flush the response if possible flusher, ok := c.Response().Writer.(http.Flusher) if ok { flusher.Flush() @@ -129,6 +136,7 @@ func HandleIncomingMessages(c echo.Context, pubsub pubsub.PubSubMessage, client } else { LogError.Println("Failed to write: ResponseWriter is nil") } + // Ensure the mutex is unlocked after processing each message mutex.Unlock() } }