36 lines
897 B
Go
36 lines
897 B
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
// HandleRealtimeWebSocket handles WebSocket upgrade for realtime communication
|
|
func (s *Server) HandleRealtimeWebSocket(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
sessionID := vars["id"]
|
|
|
|
if sessionID == "" {
|
|
writeError(w, http.StatusBadRequest, "session_id is required", nil)
|
|
return
|
|
}
|
|
|
|
// Get session to validate
|
|
_, err := s.sessionManager.GetSession(r.Context(), sessionID)
|
|
if err != nil {
|
|
writeError(w, http.StatusUnauthorized, "invalid session", err)
|
|
return
|
|
}
|
|
|
|
// Upgrade to WebSocket
|
|
if s.realtimeGateway != nil {
|
|
if err := s.realtimeGateway.HandleWebSocket(w, r, sessionID); err != nil {
|
|
writeError(w, http.StatusInternalServerError, "failed to upgrade connection", err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
writeError(w, http.StatusServiceUnavailable, "realtime gateway not available", nil)
|
|
}
|