From 4f87786bb46a230c7c54af1d85093ce2c92d6781 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 3 Aug 2025 00:12:39 +0500 Subject: feat: join servers --- cmd/irclogs/main.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ cmd/logs/main.go | 7 ------- go.mod | 5 +++++ go.sum | 4 ++++ 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 cmd/irclogs/main.go delete mode 100644 cmd/logs/main.go create mode 100644 go.sum 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) + } +} diff --git a/cmd/logs/main.go b/cmd/logs/main.go deleted file mode 100644 index eb6a1b5..0000000 --- a/cmd/logs/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "fmt" - -func main() { - fmt.Println("hello, world!") -} diff --git a/go.mod b/go.mod index 0ce8f94..b65d407 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,8 @@ module ilotterytea/irclogs go 1.22.2 + +require ( + filippo.io/edwards25519 v1.1.0 // indirect + github.com/go-sql-driver/mysql v1.9.3 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..4bcdcfa --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -- cgit v1.2.3