<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/spinal/spinald/service_registry.rb</filename>
    </added>
    <added>
      <filename>test/service_connection_test.rb</filename>
    </added>
    <added>
      <filename>test/service_registry_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -5,6 +5,8 @@ $: &lt;&lt; File.dirname(__FILE__)
 
 require &quot;shared&quot;
 
+require &quot;spinald/service_registry&quot;
+
 module Spinal
   #FIXME: Tmp hacks  
   def debug(str) puts str if @debug end
@@ -25,94 +27,18 @@ module Spinal
 
     def handle_request(packet)
       case packet.class.name
-      when 'Spinal::Packet::Query' : handle_query(packet)
-      when 'Spinal::Packet::Register' : handle_registration(packet)
+      when 'Spinal::Packet::Query' : services.request(packet, self)
+      when 'Spinal::Packet::Register' : services.register(packet, self)
       else raise(&quot;Unknown packet type: #{packet.class.inspect}&quot;)
       end
     end
     
-    def handle_query(packet)
-      if resource = resources[packet.address]
-        resource.request(packet.raw) { |resp| send_data(resp) }
-      else
-        send_data(Packet::Response.new(StatusCodes::UNKNOWN_RESOURCE).raw)
-      end
-    end
-    
-    def handle_registration(packet)
-      resources[packet.address] ||= Resource.new(packet.address)
-      resources[packet.address].add_service(packet.host, packet.port)
-      send_data(Packet::Response.new(StatusCodes::OK).raw)
-      close_connection_after_writing
-    end
-
-    def resources
-      @@resources ||= {}
-    end
-
     def packet_parser
       @packet_parser ||= PacketParser.new
     end
-
-    class Resource
-      def initialize(address)
-        @address = address
-        @queue = []
-        @pool = ServiceConnectionPool.new
-      end
-
-      def add_service(host, port)
-        @pool.connect_service(host, port)
-      end
-
-      def request(data, &amp;reply_callback)
-        if conn = @pool.reserve
-          conn.reply &amp;reply_callback
-          conn.release do
-            @pool.release(conn)
-            if queued_request = @queue.pop
-              request(queued_request[0], &amp;queued_request[1])
-            end
-          end
-          conn.send_data(data)
-        else
-          @queue.unshift([data, reply_callback])
-        end
-      end    
-    end
-
-    class ServiceConnectionPool
-      def initialize
-        @connections = []
-      end
-
-      def connect_service(host, port)
-        @connections.unshift(EM.connect(host, port, ServiceConnection))
-      end
-
-      def reserve
-        @connections.pop
-      end
-
-      def release(conn)
-        @connections.unshift(conn)
-      end
-    end
-
-    module ServiceConnection
-      def receive_data(data)
-        Spinal.debug &quot;ServiceConnection received: #{data}&quot;
-        @reply.call(data)
-        @release.call
-      end
-
-      def reply(&amp;cb)
-        @reply = cb
-      end
-
-      def release(&amp;cb)
-        @release = cb
-      end
+    
+    def services
+      @@service_registry ||= ServiceRegistry.new
     end
   end
 end</diff>
      <filename>lib/spinal/spinald.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,11 @@
-begin
-  require &quot;minitest/unit&quot;
-  Test = MiniTest
-rescue LoadError
-  require &quot;test/unit&quot;
-end
+require &quot;test/unit&quot;
+require &quot;rubygems&quot;
+require &quot;mocha&quot;
+
+# begin
+#   require &quot;minitest/unit&quot;
+#   Test = MiniTest
+# rescue LoadError
+#   require &quot;test/unit&quot;
+# end
+# </diff>
      <filename>test/test_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c96291e78f033a90ae8722996fca68e6e814e206</id>
    </parent>
  </parents>
  <author>
    <name>George Malamidis</name>
    <email>george@nutrun.com</email>
  </author>
  <url>http://github.com/gmalamid/spinal/commit/6498de4a0759bd16b0547c907b753493ca94262d</url>
  <id>6498de4a0759bd16b0547c907b753493ca94262d</id>
  <committed-date>2009-06-04T16:09:27-07:00</committed-date>
  <authored-date>2009-06-04T16:09:27-07:00</authored-date>
  <message>.</message>
  <tree>4303594917f9a0aa89761e94967ae0f7f8eed50d</tree>
  <committer>
    <name>George Malamidis</name>
    <email>george@nutrun.com</email>
  </committer>
</commit>
