1

Try to gracefully stop all existing goroutines

This commit is contained in:
Vladimir Hodakov 2019-01-09 16:06:47 +04:00
parent f240def745
commit 86ddbb26f8
Signed by: Vladimir Hodakov
GPG Key ID: 673980B6882F82C6
2 changed files with 47 additions and 46 deletions

View File

@ -24,56 +24,54 @@ func ZookeeperReceiver(client *tdlib.Client) {
receiver := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, fwMessagesFilter, 5) receiver := client.AddEventReceiver(&tdlib.UpdateNewMessage{}, fwMessagesFilter, 5)
log.Debug().Msg("Receiver added") log.Debug().Msg("Receiver added")
go func() { for newMsg := range receiver.Chan {
for newMsg := range receiver.Chan { updateMsg := (newMsg).(*tdlib.UpdateNewMessage)
updateMsg := (newMsg).(*tdlib.UpdateNewMessage) // Check if message text contains needed battle data
// Check if message text contains needed battle data msgText := updateMsg.Message.Content.(*tdlib.MessageText)
msgText := updateMsg.Message.Content.(*tdlib.MessageText) if strings.HasPrefix(msgText.Text.Text, "Я встретил") {
if strings.HasPrefix(msgText.Text.Text, "Я встретил") { log.Debug().Msgf("%s", msgText.Text.Text)
log.Debug().Msgf("%s", msgText.Text.Text) battleType := ""
battleType := "" battleTag := ""
battleTag := "" if strings.Contains(msgText.Text.Text, "Огров") {
if strings.Contains(msgText.Text.Text, "Огров") { battleType = "Огры!"
battleType = "Огры!" }
} if strings.Contains(msgText.Text.Text, "Буйволов") {
if strings.Contains(msgText.Text.Text, "Буйволов") { battleType = "Буйволы!"
battleType = "Буйволы!" }
} if strings.Contains(msgText.Text.Text, "Кабанов") {
if strings.Contains(msgText.Text.Text, "Кабанов") { battleType = "Кабаны!"
battleType = "Кабаны!" }
} switch updateMsg.Message.ReplyMarkup.(type) {
switch updateMsg.Message.ReplyMarkup.(type) { case *tdlib.ReplyMarkupInlineKeyboard:
case *tdlib.ReplyMarkupInlineKeyboard: keyboard := updateMsg.Message.ReplyMarkup.(*tdlib.ReplyMarkupInlineKeyboard)
keyboard := updateMsg.Message.ReplyMarkup.(*tdlib.ReplyMarkupInlineKeyboard) if len(keyboard.Rows) > 0 {
if len(keyboard.Rows) > 0 { if len(keyboard.Rows[0]) > 0 {
if len(keyboard.Rows[0]) > 0 { button := keyboard.Rows[0][0]
button := keyboard.Rows[0][0] switch button.Type.(type) {
switch button.Type.(type) { case *tdlib.InlineKeyboardButtonTypeSwitchInline:
case *tdlib.InlineKeyboardButtonTypeSwitchInline: buttonQuery := button.Type.(*tdlib.InlineKeyboardButtonTypeSwitchInline)
buttonQuery := button.Type.(*tdlib.InlineKeyboardButtonTypeSwitchInline) battleTag = string(buttonQuery.Query)
battleTag = string(buttonQuery.Query) default:
default: log.Error().Msg("Invalid button type")
log.Error().Msg("Invalid button type")
}
} }
} }
default:
log.Error().Msg("Invalid keyboard type")
}
log.Debug().Msgf("Battle type: %s", battleType)
log.Debug().Msgf("Battle tag: %s", battleTag)
replyText := battleType + " " + battleTag
reply := tdlib.NewInputMessageText(tdlib.NewFormattedText(replyText, nil), true, true)
_, err := client.SendMessage(announcerID, 0, false, true, nil, reply)
if err != nil {
log.Error().Err(err)
} }
default:
log.Error().Msg("Invalid keyboard type")
} }
log.Debug().Msgf("Battle type: %s", battleType)
log.Debug().Msgf("Battle tag: %s", battleTag)
<-c.ShutdownDone replyText := battleType + " " + battleTag
return
reply := tdlib.NewInputMessageText(tdlib.NewFormattedText(replyText, nil), true, true)
_, err := client.SendMessage(announcerID, 0, false, true, nil, reply)
if err != nil {
log.Error().Err(err)
}
} }
}()
<-c.ShutdownDone
return
}
} }

View File

@ -73,6 +73,9 @@ func Authenticate() {
func Connect() { func Connect() {
go func() { go func() {
announcesv1.ZookeeperReceiver(client) announcesv1.ZookeeperReceiver(client)
<-c.ShutdownDone
return
}() }()
rawUpdates := client.GetRawUpdatesChannel(100) rawUpdates := client.GetRawUpdatesChannel(100)
log.Debug().Msg("Connection with Telegram established") log.Debug().Msg("Connection with Telegram established")