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