From 570fe8f00b40c01b98fe272ede170d626f99ac5d Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 05 Apr 2025 20:32:02 +0800 Subject: [PATCH] ircSend* shall no longer be global variables --- git_hooks_handle_linux.go | 2 +- git_hooks_handle_other.go | 2 +- irc.go | 21 ++++++++------------- server.go | 3 +++ diff --git a/git_hooks_handle_linux.go b/git_hooks_handle_linux.go index ca262e316dda5c319d49158bc4cbd3dfa5bdb4a5..fde4c7e98599266050728b967c5a26963249a426 100644 --- a/git_hooks_handle_linux.go +++ b/git_hooks_handle_linux.go @@ -251,7 +251,7 @@ mergeRequestWebURL := fmt.Sprintf("%s/contrib/%d/", s.genHTTPRemoteURL(packPass.groupPath, packPass.repoName), newMRLocalID) fmt.Fprintln(sshStderr, ansiec.Blue+"Created merge request at", mergeRequestWebURL+ansiec.Reset) select { - case ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: + case s.ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: default: slog.Error("IRC SendQ exceeded") } diff --git a/git_hooks_handle_other.go b/git_hooks_handle_other.go index ed75e7ae2924e2a3ad86ece7f504867a0bd00000..8b99285072967aea282a3f3b60e1a38a40323357 100644 --- a/git_hooks_handle_other.go +++ b/git_hooks_handle_other.go @@ -229,7 +229,7 @@ mergeRequestWebURL := fmt.Sprintf("%s/contrib/%d/", s.genHTTPRemoteURL(packPass.groupPath, packPass.repoName), newMRLocalID) fmt.Fprintln(sshStderr, ansiec.Blue+"Created merge request at", mergeRequestWebURL+ansiec.Reset) select { - case ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: + case s.ircSendBuffered <- "PRIVMSG #chat :New merge request at " + mergeRequestWebURL: default: slog.Error("IRC SendQ exceeded") } diff --git a/irc.go b/irc.go index 69cc9f0328aeacab25616d6d4f476e4374bdcc3c..49fa28fccdaac74c7a89f445cbaabb1c5b71551b 100644 --- a/irc.go +++ b/irc.go @@ -11,11 +11,6 @@ irc "go.lindenii.runxiyu.org/lindenii-irc" ) -var ( - ircSendBuffered chan string - ircSendDirectChan chan errorBack[string] -) - type errorBack[T any] struct { content T errorBack chan error @@ -98,18 +93,18 @@ for { select { case err = <-readLoopError: return err - case line := <-ircSendBuffered: + case line := <-s.ircSendBuffered: _, err = logAndWriteLn(line) if err != nil { select { - case ircSendBuffered <- line: + case s.ircSendBuffered <- line: default: slog.Error("unable to requeue message", "line", line) } writeLoopAbort <- struct{}{} return err } - case lineErrorBack := <-ircSendDirectChan: + case lineErrorBack := <-s.ircSendDirectChan: _, err = logAndWriteLn(lineErrorBack.content) lineErrorBack.errorBack <- err if err != nil { @@ -122,11 +117,11 @@ } // ircSendDirect sends an IRC message directly to the connection and bypasses // the buffering system. -func ircSendDirect(s string) error { +func (s *server) ircSendDirect(line string) error { ech := make(chan error, 1) - ircSendDirectChan <- errorBack[string]{ - content: s, + s.ircSendDirectChan <- errorBack[string]{ + content: line, errorBack: ech, } @@ -135,8 +130,8 @@ } // TODO: Delay and warnings? func (s *server) ircBotLoop() { - ircSendBuffered = make(chan string, s.config.IRC.SendQ) - ircSendDirectChan = make(chan errorBack[string]) + s.ircSendBuffered = make(chan string, s.config.IRC.SendQ) + s.ircSendDirectChan = make(chan errorBack[string]) for { err := s.ircBotSession() diff --git a/server.go b/server.go index 7dbca974d320797eb49d430da5dba832d4b095a1..30b39f11c09cc16f8d40f518c12e05c14470001f 100644 --- a/server.go +++ b/server.go @@ -16,4 +16,7 @@ database *pgxpool.Pool sourceHandler http.Handler staticHandler http.Handler + + ircSendBuffered chan string + ircSendDirectChan chan errorBack[string] } -- 2.48.1