commit d1e614b5a5c73383da00fa52e7447e2d8e7f7d9f
Author: Marc Dequènes (Duck) <Duck@DuckCorp.org>
Date:   Sat Aug 14 11:57:51 2010 +0200

    [cleanup] reorganize/split cyborg interface code

diff --git a/bin/mapmaker b/bin/mapmaker
index 60e0f00..101fd48 100755
--- a/bin/mapmaker
+++ b/bin/mapmaker
@@ -22,6 +22,7 @@
 $: << File.join(File.dirname(__FILE__), "..", "lib")
 
 require 'cyborghood/cyborg'
+require 'cyborghood/cyborg/server'
 
 
 module CyborgHood
diff --git a/lib/cyborghood/cyborg.rb b/lib/cyborghood/cyborg.rb
index bb9a696..745aeb4 100644
--- a/lib/cyborghood/cyborg.rb
+++ b/lib/cyborghood/cyborg.rb
@@ -17,7 +17,6 @@
 #++
 
 require 'cyborghood'
-require 'cyborghood/cyborg/server'
 
 
 module CyborgHood
@@ -59,94 +58,4 @@ module CyborgHood
       logger.info "Bot was asked to stop..."
     end
   end
-
-  module SimpleServer
-    def setup
-      super
-      @server = BotServer.build(self.interface)
-    end
-
-    def run
-      super
-      @server.run
-    end
-
-    def ask_to_stop
-      @server.stop
-      super
-    end
-
-    def interface
-      CyborgServerInterface
-    end
-  end
-
-  class CyborgServerInterface
-    include Singleton
-
-    def initialize
-      @config = Config.instance
-    end
-
-    def api_modules
-      @modules ||= self.class.constants.select do |c|
-        cc = self.class.const_get(c)
-        cc.class == Class and cc.ancestors.include? CyborgServerInterface
-      end
-    end
-
-    def api_methods
-      @methods ||= self.methods.collect{|m| $1 if m =~ /^api_(.*)$/ }.compact
-    end
-
-    # preliminary incoming message handling
-    def call(cmd)
-      object, method = cmd.split('.', 2)
-
-      if method
-        begin
-          klass = object.split('::').inject(self.class) {|scope, const_name| scope.const_get(const_name)}
-        rescue
-          return "551 unknown object"
-        end
-      else
-        klass = self.class
-        method = cmd
-      end
-
-      inst = klass.instance
-      real_method = "api_#{method}"
-
-      unless inst.api_methods.include?(method)
-        return "551 this object has no such method"
-      end
-
-      begin
-        # preliminary outgoing message handling
-        return inst.send(real_method).to_yaml
-      rescue
-        return "550 method call failed"
-      end
-    end
-  end
-
-  class CyborgServerDefaultInterface < CyborgServerInterface
-    API_VERSION = "0.1~"
-
-    def api_product
-      PRODUCT
-    end
-
-    def api_version
-      VERSION
-    end
-
-    def api_api_version
-      API_VERSION
-    end
-
-    def api_bot_name
-      @config.bot_name
-    end
-  end
 end
diff --git a/lib/cyborghood/cyborg/interface.rb b/lib/cyborghood/cyborg/interface.rb
new file mode 100644
index 0000000..2e779cf
--- /dev/null
+++ b/lib/cyborghood/cyborg/interface.rb
@@ -0,0 +1,91 @@
+#--
+# CyborgHood, a distributed system management software.
+# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#++
+
+require 'singleton'
+
+
+module CyborgHood
+  class CyborgServerInterface
+    include Singleton
+
+    def initialize
+      @config = Config.instance
+    end
+
+    def api_modules
+      @modules ||= self.class.constants.select do |c|
+        cc = self.class.const_get(c)
+        cc.class == Class and cc.ancestors.include? CyborgServerInterface
+      end
+    end
+
+    def api_methods
+      @methods ||= self.methods.collect{|m| $1 if m =~ /^api_(.*)$/ }.compact
+    end
+
+    # preliminary incoming message handling
+    def call(cmd)
+      object, method = cmd.split('.', 2)
+
+      if method
+        begin
+          klass = object.split('::').inject(self.class) {|scope, const_name| scope.const_get(const_name)}
+        rescue
+          return "551 unknown object"
+        end
+      else
+        klass = self.class
+        method = cmd
+      end
+
+      inst = klass.instance
+      real_method = "api_#{method}"
+
+      unless inst.api_methods.include?(method)
+        return "551 this object has no such method"
+      end
+
+      begin
+        # preliminary outgoing message handling
+        return inst.send(real_method).to_yaml
+      rescue
+        return "550 method call failed"
+      end
+    end
+  end
+
+  class CyborgServerDefaultInterface < CyborgServerInterface
+    API_VERSION = "0.1~"
+
+    def api_product
+      PRODUCT
+    end
+
+    def api_version
+      VERSION
+    end
+
+    def api_api_version
+      API_VERSION
+    end
+
+    def api_bot_name
+      @config.bot_name
+    end
+  end
+end
diff --git a/lib/cyborghood/cyborg/server.rb b/lib/cyborghood/cyborg/server.rb
index 9c179f3..b90a9d7 100644
--- a/lib/cyborghood/cyborg/server.rb
+++ b/lib/cyborghood/cyborg/server.rb
@@ -17,6 +17,7 @@
 #++
 
 require 'eventmachine'
+require 'cyborghood/cyborg/interface'
 
 
 module CyborgHood
@@ -113,4 +114,25 @@ module CyborgHood
       "unix_socket/#{@signature}"
     end
   end
+
+  module SimpleServer
+    def setup
+      super
+      @server = BotServer.build(self.interface)
+    end
+
+    def run
+      super
+      @server.run
+    end
+
+    def ask_to_stop
+      @server.stop
+      super
+    end
+
+    def interface
+      CyborgServerInterface
+    end
+  end
 end
