Add events support in client
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
		| @@ -28,13 +28,14 @@ func NewSupervisor(id, stateDir string, tasks chan *StartTask) (*Supervisor, err | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	s := &Supervisor{ | ||||
| 		stateDir:   stateDir, | ||||
| 		containers: make(map[string]runtime.Container), | ||||
| 		processes:  make(map[int]runtime.Container), | ||||
| 		runtime:    r, | ||||
| 		tasks:      tasks, | ||||
| 		events:     make(chan *Event, 2048), | ||||
| 		machine:    machine, | ||||
| 		stateDir:    stateDir, | ||||
| 		containers:  make(map[string]runtime.Container), | ||||
| 		processes:   make(map[int]runtime.Container), | ||||
| 		runtime:     r, | ||||
| 		tasks:       tasks, | ||||
| 		events:      make(chan *Event, 2048), | ||||
| 		machine:     machine, | ||||
| 		subscribers: make(map[chan *Event]struct{}), | ||||
| 	} | ||||
| 	// register default event handlers | ||||
| 	s.handlers = map[EventType]Handler{ | ||||
| @@ -62,13 +63,11 @@ type Supervisor struct { | ||||
| 	runtime        runtime.Runtime | ||||
| 	events         chan *Event | ||||
| 	tasks          chan *StartTask | ||||
| 	subscribers    map[subscriber]bool | ||||
| 	subscribers    map[chan *Event]struct{} | ||||
| 	machine        Machine | ||||
| 	containerGroup sync.WaitGroup | ||||
| } | ||||
|  | ||||
| type subscriber chan *Event | ||||
|  | ||||
| func (s *Supervisor) Stop(sig chan os.Signal) { | ||||
| 	// Close the tasks channel so that no new containers get started | ||||
| 	close(s.tasks) | ||||
| @@ -109,12 +108,16 @@ func (s *Supervisor) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (s *Supervisor) Events() subscriber { | ||||
| 	return subscriber(make(chan *Event)) | ||||
| func (s *Supervisor) Events() chan *Event { | ||||
| 	c := make(chan *Event, 2048) | ||||
| 	EventSubscriberCounter.Inc(1) | ||||
| 	s.subscribers[c] = struct{}{} | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| func (s *Supervisor) Unsubscribe(sub subscriber) { | ||||
| func (s *Supervisor) Unsubscribe(sub chan *Event) { | ||||
| 	delete(s.subscribers, sub) | ||||
| 	EventSubscriberCounter.Dec(1) | ||||
| } | ||||
|  | ||||
| func (s *Supervisor) NotifySubscribers(e *Event) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Crosby
					Michael Crosby