refactor websockets implementation

This commit is contained in:
Jakob Schrettenbrunner
2018-03-14 10:34:06 +01:00
parent b8b0702f84
commit 53704fb0d7
9 changed files with 234 additions and 230 deletions

View File

@@ -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
}

View File

@@ -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

View File

@@ -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
}