From 62045c958b0d58d61e6d22deb88eed7b9ae28a4e Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 22 Mar 2025 01:17:06 +0800 Subject: Basic IRCv3 message parser --- conn.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 conn.go (limited to 'conn.go') diff --git a/conn.go b/conn.go new file mode 100644 index 0000000..ac3787c --- /dev/null +++ b/conn.go @@ -0,0 +1,42 @@ +package irc + +import ( + "bufio" + "net" + "slices" +) + +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, err error) { + raw, err := c.bufReader.ReadSlice('\n') + if err != nil { + return + } + + if raw[len(raw) - 1] == '\r' { + raw = raw[:len(raw) - 1] + } + + msg, err = Parse(slices.Clone(raw)) + + return +} + +func (c *Conn) Write(p []byte) (n int, err error) { + return c.netConn.Write(p) +} + +func (c *Conn) WriteString(s string) (n int, err error) { + return c.netConn.Write(stringToBytes(s)) +} -- cgit v1.2.3