40 lines
871 B
Go
40 lines
871 B
Go
package process
|
|
|
|
import (
|
|
"io"
|
|
"os/exec"
|
|
"sync"
|
|
)
|
|
|
|
// Status represents the status of a process for a workspace.
|
|
type Status struct {
|
|
WorkspaceID string `json:"workspaceId"`
|
|
Running bool `json:"running"`
|
|
PID int `json:"pid,omitempty"`
|
|
}
|
|
|
|
// ExitInfo holds the exit reason of a process.
|
|
type ExitInfo struct {
|
|
Code int
|
|
Signal string
|
|
}
|
|
|
|
// Session holds the runtime state of a started OpenCode process.
|
|
type Session struct {
|
|
WorkspaceID string
|
|
Root string
|
|
Cmd *exec.Cmd
|
|
Stdin io.WriteCloser
|
|
Subscribers map[Subscription]struct{}
|
|
Exit ExitInfo
|
|
mu sync.Mutex
|
|
}
|
|
|
|
// removeSubscription removes sub from s.Subscribers. It is safe to call when
|
|
// the subscription is no longer present.
|
|
func (s *Session) removeSubscription(sub *subscription) {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
delete(s.Subscribers, sub)
|
|
}
|