refactor websockets implementation
This commit is contained in:
@@ -67,7 +67,34 @@ func (env *dockerEnvironment) attach() error {
|
||||
if env.attached {
|
||||
return nil
|
||||
}
|
||||
|
||||
cw := ConsoleHandler{
|
||||
Websockets: env.server.websockets,
|
||||
}
|
||||
|
||||
var err error
|
||||
env.hires, err = env.client.ContainerAttach(context.TODO(), env.server.DockerContainer.ID,
|
||||
types.ContainerAttachOptions{
|
||||
Stdin: true,
|
||||
Stdout: true,
|
||||
Stderr: true,
|
||||
Stream: true,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.WithField("server", env.server.ID).WithError(err).Error("Failed to attach to docker container.")
|
||||
return err
|
||||
}
|
||||
env.attached = true
|
||||
|
||||
go func() {
|
||||
defer env.hires.Close()
|
||||
defer func() {
|
||||
env.attached = false
|
||||
}()
|
||||
io.Copy(cw, env.hires.Reader)
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ type Server interface {
|
||||
Save() error
|
||||
|
||||
Environment() (Environment, error)
|
||||
Websockets() *websockets.Hub
|
||||
Websockets() *websockets.Collection
|
||||
|
||||
HasPermission(string, string) bool
|
||||
}
|
||||
@@ -73,7 +73,7 @@ type ServerStruct struct {
|
||||
// TODO remove
|
||||
Keys map[string][]string `json:"keys"`
|
||||
|
||||
websockets *websockets.Hub
|
||||
websockets *websockets.Collection
|
||||
status Status
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ func (s *ServerStruct) init() error {
|
||||
}
|
||||
s.status = StatusStopped
|
||||
|
||||
s.websockets = websockets.NewHub()
|
||||
s.websockets = websockets.NewCollection()
|
||||
go s.websockets.Run()
|
||||
|
||||
var err error
|
||||
|
||||
@@ -29,7 +29,7 @@ func (s *ServerStruct) Environment() (Environment, error) {
|
||||
return s.environment, nil
|
||||
}
|
||||
|
||||
func (s *ServerStruct) Websockets() *websockets.Hub {
|
||||
func (s *ServerStruct) Websockets() *websockets.Collection {
|
||||
return s.websockets
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user