package sircd import ( "net" "os" "log" ) type sircd struct { Running bool log *log.Logger netName string ircPort uint16 httpPort uint16 ircListener net.Listener ircClients []*clientIRCConnection } const ( CONN_HOST = "localhost" CONN_PORT = "6667" CONN_TYPE = "tcp" ) func NewSircd() *sircd { s := new(sircd) s.Running = true return s } func (s *sircd) SetLogger(l *log.Logger) { s.log = l } func (s *sircd) startIRCServer() { var err error s.ircListener, err = net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT) if err != nil { log.Println("Error listening:", err.Error()) os.Exit(1) } defer s.ircListener.Close() s.log.Println("Listening for irc on " + CONN_HOST + ":" + CONN_PORT) for { // Listen for an incoming connection. conn, err := s.ircListener.Accept() if err != nil { s.log.Fatalf("Error accepting: ", err.Error()) } // Handle connections in a new goroutine. go s.handleIRCConnection(conn) } } func (s *sircd) Start() { go s.startIRCServer() } func (s *sircd) handleIRCConnection(conn net.Conn) { c := new(clientIRCConnection) c.conn = conn c.log = s.log if err != nil { c.log.Println("Error reading:", err.Error()) } // Send a response back to person contacting us. conn.Write([]byte("Message received.")) s.log.Println("Received message (%i bytes): %s", byteLen, buf) // Close the connection when you're done with it. conn.Close() }