summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-08-02 13:59:01 +0500
committerilotterytea <iltsu@alright.party>2025-08-02 13:59:01 +0500
commitcbe415e8fc05a41cb9b0a6f67ac15d5ae4b21a2d (patch)
treedc83a3885bd960c01aee5dae601bcf815796951a
parent830f7a2dfe59bcdc9442275251c892b0b7b32900 (diff)
feat: server struct
-rw-r--r--cmd/ircd/main.go28
-rw-r--r--internal/client.go7
-rw-r--r--internal/server.go46
3 files changed, 56 insertions, 25 deletions
diff --git a/cmd/ircd/main.go b/cmd/ircd/main.go
index ba958d0..ee96ab7 100644
--- a/cmd/ircd/main.go
+++ b/cmd/ircd/main.go
@@ -1,34 +1,18 @@
package main
import (
- "fmt"
ircd "ilotterytea/tinyircd/internal"
"log"
- "net"
)
func main() {
- listener, err := net.Listen("tcp", ":6667")
+ log.Println("Starting TinyIRCd...")
+
+ server, err := ircd.NewIRCServer(":6667")
if err != nil {
- log.Fatalf("Error listening: %v", err)
+ panic(err)
}
- defer listener.Close()
-
- fmt.Println("IRC server listening on :6667")
-
- clients := []*ircd.Client{}
-
- for {
- conn, err := listener.Accept()
- if err != nil {
- log.Printf("Error accepting connection: %v", err)
- continue
- }
+ defer server.Close()
- client := ircd.NewIRCClient(conn)
-
- clients = append(clients, client)
-
- go client.HandleConnection()
- }
+ server.Run()
}
diff --git a/internal/client.go b/internal/client.go
index f1939f9..287650d 100644
--- a/internal/client.go
+++ b/internal/client.go
@@ -8,11 +8,12 @@ import (
)
type Client struct {
- conn net.Conn
+ conn net.Conn
+ server *Server
}
-func NewIRCClient(conn net.Conn) *Client {
- c := Client{conn: conn}
+func NewIRCClient(conn net.Conn, server *Server) *Client {
+ c := Client{conn: conn, server: server}
return &c
}
diff --git a/internal/server.go b/internal/server.go
new file mode 100644
index 0000000..667aa97
--- /dev/null
+++ b/internal/server.go
@@ -0,0 +1,46 @@
+package ircd
+
+import (
+ "log"
+ "net"
+)
+
+type Server struct {
+ clients []*Client
+ listener net.Listener
+}
+
+func (s *Server) Run() {
+ for {
+ conn, err := s.listener.Accept()
+ if err != nil {
+ log.Printf("Error accepting connection: %v\n", err)
+ continue
+ }
+
+ client := NewIRCClient(conn, s)
+ s.clients = append(s.clients, client)
+
+ go client.HandleConnection()
+ }
+}
+
+func (s *Server) Close() {
+ s.listener.Close()
+}
+
+func NewIRCServer(address string) (*Server, error) {
+ listener, err := net.Listen("tcp", address)
+ if err != nil {
+ return nil, err
+ }
+
+ log.Println("IRC server listening on " + address)
+
+ s := Server{
+ clients: []*Client{},
+ listener: listener,
+ }
+
+ return &s, nil
+}