package ircd import ( "log" "net" "github.com/go-ini/ini" ) type Server struct { clients []*Client listener net.Listener cfg *ini.File } 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(cfg *ini.File) (*Server, error) { address := cfg.Section("address").Key("host").String() 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, cfg: cfg, } return &s, nil }