package ircd import ( "fmt" "log" "net" "strings" ) type Client struct { conn net.Conn server *Server } func NewIRCClient(conn net.Conn, server *Server) *Client { c := Client{conn: conn, server: server} return &c } func (c *Client) HandleConnection() { defer c.conn.Close() log.Printf("New client connected from %s\n", c.conn.RemoteAddr()) buffer := make([]byte, 512) for { n, err := c.conn.Read(buffer) if err != nil { log.Printf("Error reading from client %s: %v\n", c.conn.RemoteAddr(), err) return } data := strings.TrimSpace(string(buffer[:n])) fmt.Printf("%s sent %s\n", c.conn.RemoteAddr(), data) _, err = c.conn.Write([]byte("you said " + data)) if err != nil { log.Printf("Error sending to client %s: %v", c.conn.RemoteAddr(), err) return } if data == "QUIT" { break } } }