diff --git a/cmd/root.go b/cmd/root.go index 3474b475a3a1a663fb7132d4ac7bc351c1ec10bc..ffbf3329a99dc1d2ec152e553077d85f569255cc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -239,7 +239,7 @@ func setKeyParams(client *api.Client) { } type FallbackListener struct { - messagesReceived int64 + MessagesReceived int64 } func (l *FallbackListener) Hear(item switchboard.Item, isHeardElsewhere bool) { @@ -252,7 +252,7 @@ func (l *FallbackListener) Hear(item switchboard.Item, isHeardElsewhere bool) { } else { senderNick = sender.Nick } - atomic.AddInt64(&l.messagesReceived, 1) + atomic.AddInt64(&l.MessagesReceived, 1) globals.Log.INFO.Printf("Message of type %v from %q, %v received with fallback: %s\n", message.MessageType, *message.Sender, senderNick, string(message.Body)) @@ -260,7 +260,7 @@ func (l *FallbackListener) Hear(item switchboard.Item, isHeardElsewhere bool) { } type TextListener struct { - messagesReceived int64 + MessagesReceived int64 } func (l *TextListener) Hear(item switchboard.Item, isHeardElsewhere bool) { @@ -286,11 +286,11 @@ func (l *TextListener) Hear(item switchboard.Item, isHeardElsewhere bool) { globals.Log.INFO.Printf("Message from %v, %v Received: %s\n", large.NewIntFromBytes(message.Sender[:]).Text(10), senderNick, result.Message) - atomic.AddInt64(&l.messagesReceived, 1) + atomic.AddInt64(&l.MessagesReceived, 1) } type ChannelListener struct { - messagesReceived int64 + MessagesReceived int64 } //used to get the client object into hear @@ -324,7 +324,7 @@ func (l *ChannelListener) Hear(item switchboard.Item, isHeardElsewhere bool) { Sender: speakerId, Receiver: id.ZeroID, }) - atomic.AddInt64(&l.messagesReceived, 1) + atomic.AddInt64(&l.MessagesReceived, 1) } // rootCmd represents the base command when called without any subcommands @@ -444,10 +444,18 @@ var rootCmd = &cobra.Command{ timer = time.NewTimer(dummyPeriod) } } else { - // wait 45 seconds since UDB commands are now non-blocking - // TODO figure out the right way to do this - timer = time.NewTimer(45 * time.Second) - <-timer.C + // Wait up to 45 seconds to receive a message + for timeout := time.After(45 * time.Second); ; { + if text.MessagesReceived > 0 { + break + } + + select { + case <-timeout: + break + default: + } + } } //Logout