summaryrefslogtreecommitdiff
path: root/internal/server.go
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 /internal/server.go
parent830f7a2dfe59bcdc9442275251c892b0b7b32900 (diff)
feat: server struct
Diffstat (limited to 'internal/server.go')
-rw-r--r--internal/server.go46
1 files changed, 46 insertions, 0 deletions
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
+}