From 570fe8f00b40c01b98fe272ede170d626f99ac5d Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 5 Apr 2025 20:32:02 +0800 Subject: 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 +++ 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/git_hooks_handle_linux.go b/git_hooks_handle_linux.go index ca262e3..fde4c7e 100644 --- a/git_hooks_handle_linux.go +++ b/git_hooks_handle_linux.go @@ -251,7 +251,7 @@ func (s *server) hooksHandler(conn net.Conn) { 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 ed75e7a..8b99285 100644 --- a/git_hooks_handle_other.go +++ b/git_hooks_handle_other.go @@ -229,7 +229,7 @@ func (s *server) hooksHandler(conn net.Conn) { 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 69cc9f0..49fa28f 100644 --- a/irc.go +++ b/irc.go @@ -11,11 +11,6 @@ import ( 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 @@ func (s *server) ircBotSession() error { 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 @@ func (s *server) ircBotSession() error { // 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 @@ func ircSendDirect(s string) error { // 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 7dbca97..30b39f1 100644 --- a/server.go +++ b/server.go @@ -16,4 +16,7 @@ type server struct { sourceHandler http.Handler staticHandler http.Handler + + ircSendBuffered chan string + ircSendDirectChan chan errorBack[string] } -- cgit v1.2.3