66 lines
3.9 KiB
Go
66 lines
3.9 KiB
Go
package sessionbroker
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
sessioncontracts "github.com/example/remote-access-platform/backend/pkg/contracts/session"
|
|
)
|
|
|
|
type LiveStateStore interface {
|
|
UpsertSession(ctx context.Context, state LiveSessionState) error
|
|
GetSession(ctx context.Context, sessionID string) (*LiveSessionState, error)
|
|
DeleteSession(ctx context.Context, sessionID string) error
|
|
BindController(ctx context.Context, binding sessioncontracts.ControllerBinding, ttl time.Duration) error
|
|
GetControllerBinding(ctx context.Context, sessionID string) (*sessioncontracts.ControllerBinding, error)
|
|
ClearControllerBinding(ctx context.Context, sessionID string) error
|
|
StoreAttachToken(ctx context.Context, claims sessioncontracts.AttachTokenClaims, ttl time.Duration) error
|
|
ConsumeAttachToken(ctx context.Context, token string) (*sessioncontracts.AttachTokenClaims, error)
|
|
TouchAttachmentHeartbeat(ctx context.Context, sessionID, attachmentID string, ttl time.Duration) error
|
|
UpdateWorkerRoute(ctx context.Context, route WorkerRoute, ttl time.Duration) error
|
|
GetWorkerRoute(ctx context.Context, sessionID string) (*WorkerRoute, error)
|
|
DeleteWorkerRoute(ctx context.Context, sessionID string) error
|
|
}
|
|
|
|
type LiveSessionState struct {
|
|
SessionID string `json:"session_id"`
|
|
ResourceID string `json:"resource_id"`
|
|
WorkerID string `json:"worker_id"`
|
|
State sessioncontracts.State `json:"state"`
|
|
ControllerID string `json:"controller_id"`
|
|
AttachmentID string `json:"attachment_id"`
|
|
TakeoverVersion int `json:"takeover_version"`
|
|
RenderQualityProfile string `json:"render_quality_profile,omitempty"`
|
|
RenderState string `json:"render_state,omitempty"`
|
|
RenderWidth int `json:"render_width,omitempty"`
|
|
RenderHeight int `json:"render_height,omitempty"`
|
|
RenderFrameSequence int64 `json:"render_frame_sequence,omitempty"`
|
|
RenderFrameFormat string `json:"render_frame_format,omitempty"`
|
|
RenderFrameData string `json:"render_frame_data,omitempty"`
|
|
LastInputCorrelationID string `json:"last_input_correlation_id,omitempty"`
|
|
WorkerFrameCapturedAt string `json:"worker_frame_captured_at,omitempty"`
|
|
CursorX int `json:"cursor_x,omitempty"`
|
|
CursorY int `json:"cursor_y,omitempty"`
|
|
CursorVisible bool `json:"cursor_visible,omitempty"`
|
|
DirtyRectangles int `json:"dirty_rectangles,omitempty"`
|
|
LastRenderAt *time.Time `json:"last_render_at,omitempty"`
|
|
ClipboardSequence int64 `json:"clipboard_sequence,omitempty"`
|
|
ClipboardText string `json:"clipboard_text,omitempty"`
|
|
ClipboardOrigin string `json:"clipboard_origin,omitempty"`
|
|
ClipboardContentHash string `json:"clipboard_content_hash,omitempty"`
|
|
ClipboardUpdatedAt *time.Time `json:"clipboard_updated_at,omitempty"`
|
|
FileDownloadSequence int64 `json:"file_download_sequence,omitempty"`
|
|
FileDownloadType string `json:"file_download_type,omitempty"`
|
|
FileDownloadPayload map[string]any `json:"file_download_payload,omitempty"`
|
|
FileDownloadUpdatedAt *time.Time `json:"file_download_updated_at,omitempty"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type WorkerRoute struct {
|
|
SessionID string `json:"session_id"`
|
|
WorkerID string `json:"worker_id"`
|
|
LeaseID string `json:"lease_id"`
|
|
ControlStream string `json:"control_stream"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|