88	"text/template" 
99	"time" 
1010
11+ 	mqtt "github.com/eclipse/paho.mqtt.golang" 
1112	paho "github.com/eclipse/paho.mqtt.golang" 
1213	"github.com/gofrs/uuid" 
1314	"github.com/golang/protobuf/jsonpb" 
@@ -290,8 +291,8 @@ func (b *Backend) subscribeGateway(gatewayID lorawan.EUI64) error {
290291		"qos" :   b .qos ,
291292	}).Info ("integration/mqtt: subscribing to topic" )
292293
293- 	if  token  :=  b .conn .Subscribe (topic .String (), b .qos , b .handleCommand );  token . WaitTimeout ( b .maxTokenWait )  &&   token . Error ()  !=  nil  {
294- 		return  errors .Wrap (token . Error () , "subscribe topic error" )
294+ 	if  err  :=  tokenWrapper ( b .conn .Subscribe (topic .String (), b .qos , b .handleCommand ),  b .maxTokenWait );  err  !=  nil  {
295+ 		return  errors .Wrap (err , "subscribe topic error" )
295296	}
296297
297298	log .WithFields (log.Fields {
@@ -311,8 +312,8 @@ func (b *Backend) unsubscribeGateway(gatewayID lorawan.EUI64) error {
311312		"topic" : topic .String (),
312313	}).Info ("integration/mqtt: unsubscribing from topic" )
313314
314- 	if  token  :=  b .conn .Unsubscribe (topic .String ());  token . WaitTimeout ( b .maxTokenWait )  &&   token . Error ()  !=  nil  {
315- 		return  errors .Wrap (token . Error () , "unsubscribe topic error" )
315+ 	if  err  :=  tokenWrapper ( b .conn .Unsubscribe (topic .String ()),  b .maxTokenWait );  err  !=  nil  {
316+ 		return  errors .Wrap (err , "unsubscribe topic error" )
316317	}
317318
318319	log .WithFields (log.Fields {
@@ -368,8 +369,8 @@ func (b *Backend) PublishState(gatewayID lorawan.EUI64, state string, v proto.Me
368369		"state" :      state ,
369370		"gateway_id" : gatewayID ,
370371	}).Info ("integration/mqtt: publishing state" )
371- 	if  token  :=  b .conn .Publish (topic .String (), b .qos , b .stateRetained , bytes );  token . WaitTimeout ( b .maxTokenWait )  &&   token . Error ()  !=  nil  {
372- 		return  token . Error () 
372+ 	if  err  :=  tokenWrapper ( b .conn .Publish (topic .String (), b .qos , b .stateRetained , bytes ),  b .maxTokenWait );  err  !=  nil  {
373+ 		return  err 
373374	}
374375	return  nil 
375376}
@@ -383,8 +384,8 @@ func (b *Backend) connect() error {
383384	}
384385
385386	b .conn  =  paho .NewClient (b .clientOpts )
386- 	if  token  :=  b .conn .Connect ();  token . WaitTimeout ( b .maxTokenWait )  &&   token . Error ()  !=  nil  {
387- 		return  token . Error () 
387+ 	if  err  :=  tokenWrapper ( b .conn .Connect (),  b .maxTokenWait );  err  !=  nil  {
388+ 		return  err 
388389	}
389390
390391	return  nil 
@@ -676,8 +677,8 @@ func (b *Backend) publishEvent(gatewayID lorawan.EUI64, event string, fields log
676677	fields ["event" ] =  event 
677678
678679	log .WithFields (fields ).Info ("integration/mqtt: publishing event" )
679- 	if  token  :=  b .conn .Publish (topic .String (), b .qos , false , bytes );  token . WaitTimeout ( b .maxTokenWait )  &&   token . Error ()  !=  nil  {
680- 		return  token . Error () 
680+ 	if  err  :=  tokenWrapper ( b .conn .Publish (topic .String (), b .qos , false , bytes ),  b .maxTokenWait );  err  !=  nil  {
681+ 		return  err 
681682	}
682683	return  nil 
683684}
@@ -688,3 +689,10 @@ func (b *Backend) isClosed() bool {
688689	defer  b .connMux .RUnlock ()
689690	return  b .connClosed 
690691}
692+ 
693+ func  tokenWrapper (token  mqtt.Token , timeout  time.Duration ) error  {
694+ 	if  ! token .WaitTimeout (timeout ) {
695+ 		return  errors .New ("token wait timeout error" )
696+ 	}
697+ 	return  token .Error ()
698+ }
0 commit comments