From 3fcdd860895f2b85ef1c8287358527d81007c9c8 Mon Sep 17 00:00:00 2001 From: sneak Date: Mon, 19 Aug 2019 18:56:27 -0500 Subject: [PATCH] modularize --- src/main.go | 10 ++++++-- src/sircd/client.go | 22 ++++++++++++++++ src/sircd/{sircd.go => server.go} | 42 ++++++++++++++----------------- 3 files changed, 49 insertions(+), 25 deletions(-) create mode 100644 src/sircd/client.go rename src/sircd/{sircd.go => server.go} (55%) diff --git a/src/main.go b/src/main.go index adeef39..fbdd46a 100644 --- a/src/main.go +++ b/src/main.go @@ -1,12 +1,18 @@ package main +import "log" +import "os" import "sircd" +import "sync" import "time" func main() { + l := log.New(os.Stdout, "", log.Ldate | log.Lmicroseconds | log.Lshortfile) + l.Println("sircd starting up") s := sircd.NewSircd() - s.Start() + s.SetLogger(l) + go s.Start() for s.Running { - time.Sleep(100 * time.Millisecond) + time.Sleep(1 * time.Second) } } diff --git a/src/sircd/client.go b/src/sircd/client.go new file mode 100644 index 0000000..7f1f197 --- /dev/null +++ b/src/sircd/client.go @@ -0,0 +1,22 @@ +package sircd + +import ( + "net" + "os" + "log" +) + +type clientIRCConnection struct { + conn net.Conn + log *log.Logger +} + +func (c *clientIRCConnection) Read() *[]byte { + buf := make([]byte, 1024*1024) + // Read the incoming connection into the buffer. + _, err := c.conn.Read(buf) + if err != nil { + s.log.Println("Error reading:", err.Error()) + } + return &buf +} diff --git a/src/sircd/sircd.go b/src/sircd/server.go similarity index 55% rename from src/sircd/sircd.go rename to src/sircd/server.go index f844d5f..b74c052 100644 --- a/src/sircd/sircd.go +++ b/src/sircd/server.go @@ -1,13 +1,14 @@ package sircd import ( - "fmt" "net" "os" + "log" ) type sircd struct { Running bool + log *log.Logger netName string ircPort uint16 httpPort uint16 @@ -15,10 +16,6 @@ type sircd struct { ircClients []*clientIRCConnection } -type clientIRCConnection struct { - conn net.Conn -} - const ( CONN_HOST = "localhost" CONN_PORT = "6667" @@ -31,49 +28,48 @@ func NewSircd() *sircd { return s } -func (s *sircd) startServer() { +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 { - fmt.Println("Error listening:", err.Error()) + log.Println("Error listening:", err.Error()) os.Exit(1) } defer s.ircListener.Close() - fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT) - fmt.Printf("%T\n",s.ircListener) + 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 { - fmt.Println("Error accepting: ", err.Error()) - os.Exit(1) + s.log.Fatalf("Error accepting: ", err.Error()) } // Handle connections in a new goroutine. - go handleRequest(conn) + go s.handleIRCConnection(conn) } } func (s *sircd) Start() { - go func() { - s.startServer() - }() + go s.startIRCServer() } -// Handles incoming requests. -func handleRequest(conn net.Conn) { - // Make a buffer to hold incoming data. - buf := make([]byte, 1024) - // Read the incoming connection into the buffer. - byteLen, err := conn.Read(buf) +func (s *sircd) handleIRCConnection(conn net.Conn) { + c := new(clientIRCConnection) + c.conn = conn + c.log = s.log + if err != nil { - fmt.Println("Error reading:", err.Error()) + c.log.Println("Error reading:", err.Error()) } // Send a response back to person contacting us. conn.Write([]byte("Message received.")) - fmt.Println("Received message (%i bytes): %s", byteLen, buf) + s.log.Println("Received message (%i bytes): %s", byteLen, buf) // Close the connection when you're done with it. conn.Close() }