45 lines
877 B
Go
45 lines
877 B
Go
package srvhnakra
|
|
|
|
import "log"
|
|
import "fmt"
|
|
import "net"
|
|
import "crypto/tls"
|
|
import "hnakra/router"
|
|
import "hnakra/router/config"
|
|
|
|
type Server struct {
|
|
underlying net.Listener
|
|
Config config.Config
|
|
Router *router.Router
|
|
|
|
running bool
|
|
}
|
|
|
|
func (server *Server) Run () (err error) {
|
|
server.underlying, err = tls.Listen (
|
|
"tcp", fmt.Sprint(":", server.Config.RouterPort()),
|
|
config.TLSConfigFor(server.Config))
|
|
if err != nil { return err }
|
|
|
|
server.running = true
|
|
log.Println(".// router on", server.underlying.Addr())
|
|
|
|
for {
|
|
conn, err := server.underlying.Accept()
|
|
if err != nil {
|
|
if server.running {
|
|
return err
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
log.Println("-=E incoming connection from", conn.RemoteAddr())
|
|
server.Router.Accept(conn)
|
|
}
|
|
}
|
|
|
|
func (server *Server) Shutdown () error {
|
|
server.running = false
|
|
return server.underlying.Close()
|
|
}
|