From: Javier Sancho Date: Tue, 12 Dec 2017 15:59:01 +0000 (+0100) Subject: Open telnet connection to Merc MUD and receive welcome message X-Git-Url: https://git.jsancho.org/?p=midgaard_bot.git;a=commitdiff_plain;h=6547f877dd15e7af8bf6c494da5ac9c2ed849745 Open telnet connection to Merc MUD and receive welcome message --- diff --git a/midgaard_bot.go b/midgaard_bot.go index ce92e73..10aab4b 100644 --- a/midgaard_bot.go +++ b/midgaard_bot.go @@ -49,7 +49,7 @@ func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - err = initSessions(ctx) + err = initSessions(Config.Merc.Host, ctx) if err != nil { log.Panic(err) } diff --git a/sessions.go b/sessions.go index a4f0c89..17fa545 100644 --- a/sessions.go +++ b/sessions.go @@ -20,9 +20,9 @@ package main import ( "context" - "log" "github.com/go-telegram-bot-api/telegram-bot-api" + "github.com/reiver/go-telnet" ) type Session struct { @@ -31,10 +31,12 @@ type Session struct { } var sessions map[int64]*Session +var mercHost string var sessionsCtx context.Context -func initSessions(ctx context.Context) error { +func initSessions(host string, ctx context.Context) error { sessions = make(map[int64]*Session) + mercHost = host sessionsCtx = ctx return nil } @@ -56,19 +58,31 @@ func newSession(chat *tgbotapi.Chat) *Session { func startSession(session *Session) { ctx, _ := context.WithCancel(sessionsCtx) + go func() { - for { - select { - case msg := <-session.Input: - log.Printf("[%s] %s", msg.From.UserName, msg.Text) - - newMsg := tgbotapi.NewMessage(msg.Chat.ID, msg.Text) - newMsg.ReplyToMessageID = msg.MessageID - sendToTelegram(newMsg) - case <-ctx.Done(): - return - } + telnetInput, telnetOutput := make(chan string), make(chan string) + caller := TelnetCaller{ + Input: telnetInput, + Output: telnetOutput, } + + go func() { + for { + select { + case msg := <-session.Input: + if msg.Text != "/start" { + telnetInput <- msg.Text + } + case body := <-telnetOutput: + newMsg := tgbotapi.NewMessage(session.Chat.ID, body) + sendToTelegram(newMsg) + case <-ctx.Done(): + return + } + } + }() + + telnet.DialToAndCall(mercHost, caller) }() }