From 5e7b9d1a8efc3d10863e7222c104c55e2036d6e2 Mon Sep 17 00:00:00 2001 From: Daniel Danopia Date: Mon, 11 Jan 2010 16:38:34 -0500 Subject: [PATCH] Handle ctrl-c (but not very well; chanserv won't QUIT and the globops doesn't get received) --- bitserv.rb | 5 +++++ bots/chanserv.rb | 4 ++++ server_link.rb | 8 ++++++++ services.rb | 7 ++++++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bitserv.rb b/bitserv.rb index a6ba378..86f8ae6 100644 --- a/bitserv.rb +++ b/bitserv.rb @@ -28,6 +28,11 @@ services.add_uplink BitServ::ServerLink +trap "INT" do + services.shutdown "Caught interupt" + exit +end + EventMachine.run do services.run! # TODO: Have two different calls, one that connects and # one that starts EM and then connects. Possibly #connect to connect diff --git a/bots/chanserv.rb b/bots/chanserv.rb index 0781075..4c3de34 100644 --- a/bots/chanserv.rb +++ b/bots/chanserv.rb @@ -9,5 +9,9 @@ def on_new_channel link, channel # end #end end + + def on_shutdown message + @services.call_uplinks :quit_clone, self.nick, 'Shutting down' + end end end diff --git a/server_link.rb b/server_link.rb index f8e3e62..fd77296 100644 --- a/server_link.rb +++ b/server_link.rb @@ -45,6 +45,10 @@ def ping send '8', @me end + def oper_msg message + send ":#{@me}", 'GLOBOPS', message + end + def force_join channel, bot send ":#{@me}", '~', channel.timestamp.to_i, channel.name, '+', ":@#{bot.nick}" puts "hi" @@ -63,6 +67,10 @@ def introduce_bots introduce_clone bot.nick end end + + def quit_clone nick, message='Leaving' + send ":#{nick}", 'QUIT', message + end def message origin, user, message user = user.nick if user.is_a? User # TODO: implement User#to_s? diff --git a/services.rb b/services.rb index f314705..4354bdc 100644 --- a/services.rb +++ b/services.rb @@ -28,6 +28,11 @@ def initialize(config_file = nil) @running = false end + def shutdown message='Shutting down' + emit :on_shutdown, message + call_uplinks :oper_msg, message + end + def load_bot type, *args @bots << type.new(self, *args) end @@ -74,7 +79,7 @@ def connect_uplink uplink def call_uplinks method, *args @uplinks.each do |uplink| - uplink.call method, *args + uplink[:instance].__send__ method, *args # don't collide with send-to-server end end