From 5717faed659a9eeb86c528ab56822c42eca1ad3f Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 12 Aug 2025 11:01:07 +0800 Subject: Refactor --- forged/internal/ipc/irc/conn.go | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 forged/internal/ipc/irc/conn.go (limited to 'forged/internal/ipc/irc/conn.go') diff --git a/forged/internal/ipc/irc/conn.go b/forged/internal/ipc/irc/conn.go new file mode 100644 index 0000000..b9b208c --- /dev/null +++ b/forged/internal/ipc/irc/conn.go @@ -0,0 +1,58 @@ +package irc + +import ( + "bufio" + "fmt" + "net" + "slices" + + "go.lindenii.runxiyu.org/forge/forged/internal/common/misc" +) + +type Conn struct { + netConn net.Conn + bufReader *bufio.Reader +} + +func NewConn(netConn net.Conn) Conn { + return Conn{ + netConn: netConn, + bufReader: bufio.NewReader(netConn), + } +} + +func (c *Conn) ReadMessage() (msg Message, line string, err error) { + raw, err := c.bufReader.ReadSlice('\n') + if err != nil { + return + } + + if raw[len(raw)-1] == '\n' { + raw = raw[:len(raw)-1] + } + if raw[len(raw)-1] == '\r' { + raw = raw[:len(raw)-1] + } + + lineBytes := slices.Clone(raw) + line = misc.BytesToString(lineBytes) + msg, err = Parse(lineBytes) + + return +} + +func (c *Conn) Write(p []byte) (n int, err error) { + n, err = c.netConn.Write(p) + if err != nil { + err = fmt.Errorf("write to connection: %w", err) + } + return n, err +} + +func (c *Conn) WriteString(s string) (n int, err error) { + n, err = c.netConn.Write(misc.StringToBytes(s)) + if err != nil { + err = fmt.Errorf("write to connection: %w", err) + } + return n, err +} -- cgit v1.2.3