diff options
| author | ilotterytea <iltsu@alright.party> | 2025-08-02 13:15:00 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-08-02 13:15:00 +0500 |
| commit | 830f7a2dfe59bcdc9442275251c892b0b7b32900 (patch) | |
| tree | 074fb57b0e0bf32c465b315cd0644c71c0b3583f | |
| parent | 141ea48aef643b2e2f7b7ed6e564365ced7a03b8 (diff) | |
feat: client struct
| -rw-r--r-- | cmd/ircd/main.go | 9 | ||||
| -rw-r--r-- | internal/client.go | 33 |
2 files changed, 31 insertions, 11 deletions
diff --git a/cmd/ircd/main.go b/cmd/ircd/main.go index 91eebbf..ba958d0 100644 --- a/cmd/ircd/main.go +++ b/cmd/ircd/main.go @@ -8,7 +8,6 @@ import ( ) func main() { - fmt.Println("hello world!") listener, err := net.Listen("tcp", ":6667") if err != nil { log.Fatalf("Error listening: %v", err) @@ -17,6 +16,8 @@ func main() { fmt.Println("IRC server listening on :6667") + clients := []*ircd.Client{} + for { conn, err := listener.Accept() if err != nil { @@ -24,6 +25,10 @@ func main() { continue } - go ircd.HandleClientConnection(conn) + client := ircd.NewIRCClient(conn) + + clients = append(clients, client) + + go client.HandleConnection() } } diff --git a/internal/client.go b/internal/client.go index 164a29d..f1939f9 100644 --- a/internal/client.go +++ b/internal/client.go @@ -4,28 +4,43 @@ import ( "fmt" "log" "net" + "strings" ) -func HandleClientConnection(conn net.Conn) { - defer conn.Close() - log.Printf("New client connected from %s\n", conn.RemoteAddr()) +type Client struct { + conn net.Conn +} + +func NewIRCClient(conn net.Conn) *Client { + c := Client{conn: conn} + + 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 := conn.Read(buffer) + n, err := c.conn.Read(buffer) if err != nil { - log.Printf("Error reading from client %s: %v\n", conn.RemoteAddr(), err) + log.Printf("Error reading from client %s: %v\n", c.conn.RemoteAddr(), err) return } - data := string(buffer[:n]) - fmt.Printf("%s sent %s\n", conn.RemoteAddr(), data) + data := strings.TrimSpace(string(buffer[:n])) + fmt.Printf("%s sent %s\n", c.conn.RemoteAddr(), data) - _, err = conn.Write([]byte("you said " + data)) + _, err = c.conn.Write([]byte("you said " + data)) if err != nil { - log.Printf("Error sending to client %s: %v", conn.RemoteAddr(), err) + log.Printf("Error sending to client %s: %v", c.conn.RemoteAddr(), err) return } + + if data == "QUIT" { + break + } } } |
