diff options
| author | ilotterytea <iltsu@alright.party> | 2025-08-02 13:59:01 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-08-02 13:59:01 +0500 |
| commit | cbe415e8fc05a41cb9b0a6f67ac15d5ae4b21a2d (patch) | |
| tree | dc83a3885bd960c01aee5dae601bcf815796951a | |
| parent | 830f7a2dfe59bcdc9442275251c892b0b7b32900 (diff) | |
feat: server struct
| -rw-r--r-- | cmd/ircd/main.go | 28 | ||||
| -rw-r--r-- | internal/client.go | 7 | ||||
| -rw-r--r-- | internal/server.go | 46 |
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 +} |
