]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/ircbot.rb
* (timer) stop the bot timer for shutdown / rescan
[user/henk/code/ruby/rbot.git] / lib / rbot / ircbot.rb
index 72068a8e8a66850acbc01dd63644a7e1eb110047..46d5e902dc1066b33ba25c89ae1281a998c4c3d0 100644 (file)
@@ -90,10 +90,9 @@ fatal "fatal test"
 # The following global is used for the improved signal handling.
 $interrupted = 0
 
-require 'rbot/load-gettext'
-
 # these first
 require 'rbot/rbotconfig'
+require 'rbot/load-gettext'
 require 'rbot/config'
 # require 'rbot/utils'
 
@@ -437,7 +436,7 @@ class Bot
 
     @registry = BotRegistry.new self
 
-    @timer = Timer::Timer.new(1.0) # only need per-second granularity
+    @timer = Timer.new
     @save_mutex = Mutex.new
     if @config['core.save_every'] > 0
       @save_timer = @timer.add(@config['core.save_every']) { save }
@@ -449,7 +448,7 @@ class Bot
     @logs = Hash.new
 
     @plugins = nil
-    @lang = Language::Language.new(self, @config['core.language'])
+    @lang = Language.new(self, @config['core.language'])
 
     begin
       @auth = Auth::authmanager
@@ -771,7 +770,6 @@ class Bot
       begin
         quit if $interrupted > 0
         connect
-        @timer.start
 
         quit_msg = nil
         while @socket.connected?
@@ -1013,8 +1011,8 @@ class Bot
     sendq "TOPIC #{where} :#{topic}", where, 2
   end
 
-  def disconnect(message = nil)
-    message = @lang.get("quit") if (message.nil? || message.empty?)
+  def disconnect(message=nil)
+    message = @lang.get("quit") if (!message || message.empty?)
     if @socket.connected?
       debug "Clearing socket"
       @socket.clearq
@@ -1034,9 +1032,9 @@ class Bot
   end
 
   # disconnect from the server and cleanup all plugins and modules
-  def shutdown(message = nil)
+  def shutdown(message=nil)
     @quit_mutex.synchronize do
-      debug "Shutting down:"
+      debug "Shutting down: #{message}"
       ## No we don't restore them ... let everything run through
       # begin
       #   trap("SIGINT", "DEFAULT")
@@ -1046,15 +1044,17 @@ class Bot
       #   debug "failed to restore signals: #{e.inspect}\nProbably running on windows?"
       # end
       debug "\tdisconnecting..."
-      disconnect
+      disconnect(message)
+      debug "\tstopping timer..."
+      @timer.stop
       debug "\tsaving ..."
       save
       debug "\tcleaning up ..."
       @save_mutex.synchronize do
         @plugins.cleanup
       end
-      debug "\tstopping timers ..."
-      @timer.stop
+      debug "\tstopping timers ..."
+      @timer.stop
       # debug "Closing registries"
       # @registry.close
       debug "\t\tcleaning up the db environment ..."
@@ -1074,9 +1074,9 @@ class Bot
   end
 
   # totally shutdown and respawn the bot
-  def restart(message = false)
-    msg = message ? message : "restarting, back in #{@config['server.reconnect_wait']}..."
-    shutdown(msg)
+  def restart(message=nil)
+    message = "restarting, back in #{@config['server.reconnect_wait']}..." if (!message || message.empty?)
+    shutdown(message)
     sleep @config['server.reconnect_wait']
     begin
       # now we re-exec
@@ -1102,10 +1102,13 @@ class Bot
 
   # call the rescan method for all of the botmodules
   def rescan
+    debug "\tstopping timer..."
+    @timer.stop
     @save_mutex.synchronize do
       @lang.rescan
       @plugins.rescan
     end
+    @timer.start
   end
 
   # channel:: channel to join