From 6aa6f0aeaae8673f81eb14544fcad132a2811fd0 Mon Sep 17 00:00:00 2001 From: Jeremy Latt Date: Sun, 2 Mar 2014 11:36:00 -0800 Subject: [PATCH] notify clients when the server shuts down --- irc/server.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/irc/server.go b/irc/server.go index 49c5f4ad..896c4ac4 100644 --- a/irc/server.go +++ b/irc/server.go @@ -16,6 +16,7 @@ import ( "runtime/debug" "runtime/pprof" "strings" + "syscall" "time" ) @@ -57,7 +58,7 @@ func NewServer(config *Config) *Server { timeout: make(chan *Client, 16), } - signal.Notify(server.signals, os.Interrupt, os.Kill) + signal.Notify(server.signals, syscall.SIGINT, syscall.SIGHUP) server.loadChannels() @@ -138,14 +139,20 @@ func (server *Server) processCommand(cmd Command) { } } +func (server *Server) Shutdown() { + server.db.Close() + for _, client := range server.clients { + client.Reply(RplNotice(server, client, "shutting down")) + } +} + func (server *Server) Run() { done := false for !done { select { case <-server.signals: - server.db.Close() + server.Shutdown() done = true - continue case conn := <-server.newConns: NewClient(server, conn)