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