Listeners - gotta go, switching to range-based subscription

pull/3/head
Ilya Kowalewski 9 years ago
parent 7da336849b
commit dd4efff2f3

@ -9,17 +9,13 @@ type Bot struct {
// Bot as `User` on API level. // Bot as `User` on API level.
Identity User Identity User
listeners []Listener
} }
type Listener func(*Bot, Message) func (b *Bot) Listen(subscription chan<- Message, interval time.Duration) {
updates := make(chan Update)
func (b *Bot) Listen(interval time.Duration) {
updates := make(chan Update, 1000)
var latest_update int
pulse := time.NewTicker(interval) pulse := time.NewTicker(interval)
latest_update := 0
go func() { go func() {
for range pulse.C { for range pulse.C {
go api_getUpdates(b.Token, go api_getUpdates(b.Token,
@ -28,19 +24,15 @@ func (b *Bot) Listen(interval time.Duration) {
} }
}() }()
for update := range updates { go func() {
if update.Id > latest_update { for update := range updates {
latest_update = update.Id if update.Id > latest_update {
} latest_update = update.Id
}
for _, ear := range b.listeners { subscription <- update.Payload
go ear(b, update.Payload)
} }
} }()
}
func (b *Bot) AddListener(ear Listener) {
b.listeners = append(b.listeners, ear)
} }
func (b *Bot) SendMessage(recipient User, message string) { func (b *Bot) SendMessage(recipient User, message string) {

@ -25,13 +25,15 @@ func TestListen(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
bot.AddListener(func(bot *Bot, message Message) { messages := make(chan Message)
bot.Listen(messages, 1*time.Second)
log.Println("Listening...")
for message := range messages {
if message.Text == "/hi" { if message.Text == "/hi" {
bot.SendMessage(message.Chat, bot.SendMessage(message.Chat,
"Hello, "+message.Sender.FirstName+"!") "Hello, "+message.Sender.FirstName+"!")
} }
}) }
log.Println("Listening...")
bot.Listen(1 * time.Second)
} }

Loading…
Cancel
Save