diff options
Diffstat (limited to 'cmd/irclogs/main.go')
| -rw-r--r-- | cmd/irclogs/main.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/cmd/irclogs/main.go b/cmd/irclogs/main.go new file mode 100644 index 0000000..509447f --- /dev/null +++ b/cmd/irclogs/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "database/sql" + "slices" + "strings" + "time" + + irclogs "ilotterytea/irclogs/internal" + "log" + + _ "github.com/go-sql-driver/mysql" +) + +func main() { + db, err := sql.Open("mysql", "kochan:kochan@/irclogs") + if err != nil { + log.Panicf("Failed to establish a database connection: %v\n", err) + } + defer db.Close() + + clients := []irclogs.IRCClient{} + + for { + rows, err := db.Query("SELECT host, port, nick, pass, capabilities FROM servers") + if err != nil { + log.Fatalf("Failed to get servers: %v\n", err) + continue + } + + for rows.Next() { + var host, nick, pass, caps string + var port int + if err = rows.Scan(&host, &port, &nick, &pass, &caps); err != nil { + log.Fatalf("Failed to scan rows: %v\n", err) + continue + } + + if !slices.ContainsFunc(clients, func(c irclogs.IRCClient) bool { + return c.Host == host + }) { + log.Printf("Connecting to %s:%d...\n", host, port) + c := irclogs.NewIRCClient(host, port, nick, pass, strings.Split(caps, "\n")) + + go func() { + if err = c.Connect(); err != nil { + log.Panicf("Failed to connect %s: %v\n", host, err) + } + }() + + clients = append(clients, c) + } + } + + rows.Close() + + time.Sleep(5 * time.Second) + } +} |
