package instancemanager import ( "context" "net" "git.acooldomain.co/server-manager/backend/models" ) type Server struct { Id string Running bool RunningCommand string RunningImage *models.Image Ports []models.Port Domain string } type TerminalConnection struct { Conn net.Conn ResizerFunc func(width uint, height uint) error } type Port struct { Number uint16 Protocol models.PortProtocol } type Image struct { Id string Registry string Tag string Command string WorkingDir string Ports []Port } type InstanceManager interface { // General // Read Only GetImage(ctx context.Context, imageId string) (*Image, error) ListImages(ctx context.Context) ([]Image, error) GetServer(ctx context.Context, serverId string) (*Server, error) ListServers(ctx context.Context) ([]Server, error) // State Changing StartServer(ctx context.Context, serverId string, imageId string, command string, ports []models.Port) error StopServer(ctx context.Context, serverId string) error CreateServer(ctx context.Context) (*Server, error) DeleteServer(ctx context.Context, serverId string) error // Terminal // Status Changing InteractiveTerminal(ctx context.Context, serverId string) (*TerminalConnection, error) // File Browser // Read Only GetFileBrowser(ctx context.Context, serverId string) (*models.FileBrowser, error) GetFileBrowserFromUrl(ctx context.Context, url string) (*models.FileBrowser, error) ListFileBrowsers(ctx context.Context) ([]models.FileBrowser, error) // Status Changing StartFileBrowser(ctx context.Context, serverId string) (*models.FileBrowser, error) StopFileBrowser(ctx context.Context, serverId string) error }