Make it possible to call service.Init multiple times
This commit is contained in:
		
							
								
								
									
										15
									
								
								service.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								service.go
									
									
									
									
									
								
							| @@ -14,6 +14,8 @@ import ( | ||||
|  | ||||
| type service struct { | ||||
| 	opts Options | ||||
|  | ||||
| 	init chan bool | ||||
| } | ||||
|  | ||||
| func newService(opts ...Option) Service { | ||||
| @@ -28,6 +30,7 @@ func newService(opts ...Option) Service { | ||||
|  | ||||
| 	return &service{ | ||||
| 		opts: options, | ||||
| 		init: make(chan bool), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -49,7 +52,18 @@ func (s *service) run(exit chan bool) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Init initialises options. Additionally it calls cmd.Init | ||||
| // which parses command line flags. cmd.Init is only called | ||||
| // on first Init. | ||||
| func (s *service) Init(opts ...Option) { | ||||
| 	// If <-s.init blocks, Init has not been called yet | ||||
| 	// so we can call cmd.Init once. | ||||
| 	select { | ||||
| 	case <-s.init: | ||||
| 	default: | ||||
| 		// close init | ||||
| 		close(s.init) | ||||
|  | ||||
| 		// We might get more command flags or the action here | ||||
| 		// This is pretty ugly, find a better way | ||||
| 		options := newOptions() | ||||
| @@ -67,6 +81,7 @@ func (s *service) Init(opts ...Option) { | ||||
| 			cmd.Client(&s.opts.Client), | ||||
| 			cmd.Server(&s.opts.Server), | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| 	// Update any options to override command flags | ||||
| 	for _, o := range opts { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user