adaptor/macos: handle case when adapter enable sends notification before event delegate is set
Signed-off-by: Ron Evans <ron@hybridgroup.com>
This commit is contained in:
parent
266de9824a
commit
0bc0ef868d
1 changed files with 14 additions and 7 deletions
|
@ -43,16 +43,23 @@ func (a *Adapter) Enable() error {
|
|||
}
|
||||
|
||||
// wait until powered
|
||||
a.poweredChan = make(chan error)
|
||||
a.poweredChan = make(chan error, 1)
|
||||
|
||||
a.cmd = ¢ralManagerDelegate{a: a}
|
||||
a.cm.SetDelegate(a.cmd)
|
||||
select {
|
||||
case <-a.poweredChan:
|
||||
case <-time.NewTimer(10 * time.Second).C:
|
||||
return errors.New("timeout enabling CentralManager")
|
||||
|
||||
if a.cm.State() != cbgo.ManagerStatePoweredOn {
|
||||
select {
|
||||
case <-a.poweredChan:
|
||||
case <-time.NewTimer(10 * time.Second).C:
|
||||
return errors.New("timeout enabling CentralManager")
|
||||
}
|
||||
}
|
||||
|
||||
// drain any extra powered-on events from channel
|
||||
for len(a.poweredChan) > 0 {
|
||||
<-a.poweredChan
|
||||
}
|
||||
a.poweredChan = nil
|
||||
|
||||
// wait until powered?
|
||||
a.pmd = &peripheralManagerDelegate{a: a}
|
||||
|
@ -73,7 +80,7 @@ type centralManagerDelegate struct {
|
|||
func (cmd *centralManagerDelegate) CentralManagerDidUpdateState(cmgr cbgo.CentralManager) {
|
||||
// powered on?
|
||||
if cmgr.State() == cbgo.ManagerStatePoweredOn {
|
||||
close(cmd.a.poweredChan)
|
||||
cmd.a.poweredChan <- nil
|
||||
}
|
||||
|
||||
// TODO: handle other state changes.
|
||||
|
|
Loading…
Reference in a new issue