Commit 0a2d5db

mo <mo.khan@gmail.com>
2018-04-27 21:24:15
move jabber connection code to connection object.
1 parent 4289c40
Changed files (3)
lib/del/connection.rb
@@ -0,0 +1,67 @@
+module Del
+  class Connection
+    attr_reader :configuration, :rooms, :users
+
+    def initialize(configuration:, users:, rooms:)
+      @configuration = configuration
+      @rooms = rooms
+      @users = users
+    end
+
+    def connect(robot)
+      client.on_exception do |error, connection, error_source|
+        disconnect
+      end
+      client.connect(configuration[:host])
+      sleep 0.0001 until client.is_connected?
+      client.auth(configuration[:password])
+      roster = Jabber::Roster::Helper.new(client, false)
+      roster.add_update_callback do |old_item, item|
+        users.create(item) if item
+      end
+      roster.get_roster
+      roster.wait_for_roster
+      #@mention_name = roster[jid].attributes["mention_name"]
+      client.add_message_callback do |message|
+        robot.receive_message(message)
+      end
+      client.send(Jabber::Presence.new(:chat))
+      list_rooms(configuration[:muc_domain]).each do |room|
+        rooms.upsert(room)
+      end
+    end
+
+    def deliver(jid, message)
+      message = Jabber::Message.new(jid, encode_string(message))
+      message.type = :chat
+      client.send(message)
+    end
+
+    def disconnect
+      puts "byte me!"
+      client.close
+    end
+
+    private
+
+    def client
+      @client ||= Jabber::Client.new(jid)
+    end
+
+    def jid
+      jid = Jabber::JID.new(configuration[:jid])
+      jid.resource = "bot"
+      jid
+    end
+
+    def list_rooms(muc_domain)
+      Jabber::MUC::MUCBrowser.new(client).muc_rooms(muc_domain).map do |jid, name|
+        jid.to_s
+      end
+    end
+
+    def encode_string(s)
+      s.encode("UTF-8", invalid: :replace, undef: :replace)
+    end
+  end
+end
lib/del/robot.rb
@@ -1,72 +1,31 @@
 module Del
   class Robot
-    attr_reader :configuration, :users, :rooms
+    attr_reader :connection, :users, :rooms
 
     def initialize(configuration:)
-      @configuration = configuration
       @users = UserRepository.new
       @rooms = RoomRepository.new
+      @connection = Connection.new(
+        configuration: configuration,
+        users: users,
+        rooms: rooms,
+      )
     end
 
     def run
-      client.on_exception do |error, connection, error_source|
-        puts error.inspect
-        shut_down
-      end
-      client.connect(configuration[:host])
-      sleep 0.0001 until client.is_connected?
-      client.auth(configuration[:password])
-      roster = Jabber::Roster::Helper.new(client, false)
-      roster.add_update_callback do |old_item, item|
-        users.create(item) if item
-      end
-      roster.get_roster
-      roster.wait_for_roster
-      #@mention_name = roster[jid].attributes["mention_name"]
-      client.add_message_callback do |message|
-        next if message.type == :error || message.body.nil?
-        send_message(message.from, message.body)
-      end
-      client.send(Jabber::Presence.new(:chat))
-      list_rooms(configuration[:muc_domain]).each do |room|
-        rooms.upsert(room)
-      end
+      connection.connect(self)
       sleep
     rescue Interrupt
-      shut_down
+      connection.disconnect
     end
 
-    def send_message(jid, message)
-      message = Jabber::Message.new(jid, encode_string(message))
-      message.type = :chat
-      client.send(message)
-    end
-
-    private
-
-    def list_rooms(muc_domain)
-      Jabber::MUC::MUCBrowser.new(client).muc_rooms(muc_domain).map do |jid, name|
-        jid.to_s
-      end
-    end
-
-    def client
-      @client ||= Jabber::Client.new(jid)
+    def receive_message(message)
+      return if message.type == :error || message.body.nil?
+      send_message(message.from, message.body)
     end
 
-    def jid
-      jid = Jabber::JID.new(configuration[:jid])
-      jid.resource = "bot"
-      jid
-    end
-
-    def shut_down
-      puts "byte me!"
-      client.close
-    end
-
-    def encode_string(s)
-      s.encode("UTF-8", invalid: :replace, undef: :replace)
+    def send_message(jid, message)
+      connection.deliver(jid, message)
     end
   end
 end
lib/del.rb
@@ -4,11 +4,12 @@ require "xmpp4r/muc/helper/mucbrowser"
 require "xmpp4r/muc/helper/simplemucclient"
 require "xmpp4r/roster/helper/roster"
 
+require "del/connection"
 require "del/robot"
-require "del/version"
 require "del/room_repository"
 require "del/user"
 require "del/user_repository"
+require "del/version"
 
 module Del
   def self.start