summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-08-02 13:15:00 +0500
committerilotterytea <iltsu@alright.party>2025-08-02 13:15:00 +0500
commit830f7a2dfe59bcdc9442275251c892b0b7b32900 (patch)
tree074fb57b0e0bf32c465b315cd0644c71c0b3583f
parent141ea48aef643b2e2f7b7ed6e564365ced7a03b8 (diff)
feat: client struct
-rw-r--r--cmd/ircd/main.go9
-rw-r--r--internal/client.go33
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
+ }
}
}