class Session
attr_reader :connection
- def initialize(server_info, mboxes)
- @server_info = server_info
+ def initialize(config)
+ @login = config[:server][:login]
+ @password = config[:server][:password]
- flags = 2
- flags |= 16 if @server_info.use_ssl
+ flags = 3
+ flags |= 16 if config[:server][:use_ssl]
@connection = Ecore::Con::Server.new(flags,
- @server_info[:host],
- @server_info[:port])
+ config[:server][:host],
+ config[:server][:port])
@buffer = ""
@tag_id = 0
@requests = []
- @mboxes = mboxes.dup
+ @mboxes = config[:mailboxes].dup
@state = :disconnected
@handlers = [
handle_response(Response.deserialize(line))
if @state == :connected
- login(@server_info[:login], @server_info[:password])
+ login(@login, @password)
end
end
end
def handle_tagged_response(resp, req)
- return unless req.is_a?(LoginRequest)
-
- case resp.status
- when :ok
- @state = :logged_in
-
- @mboxes.each { |mb| query_status(mb) }
- else
- raise(LoginError, "cannot login - #{resp.data}")
+ case req
+ when LoginRequest
+ case resp.status
+ when :ok
+ @state = :logged_in
+
+ @mboxes.each { |mb| query_status(mb) }
+ else
+ raise(LoginError, "cannot login - #{resp.data}")
+ end
+ when StatusRequest
+ @mboxes.delete(req.mailbox)
+
+ if @mboxes.empty?
+ @status = :done
+ logout
+ end
end
end
name, count = md.captures.first, md.captures.last.to_i
MailboxStatusEvent.raise(name, count)
- @mboxes.delete(name)
-
- if @mboxes.empty?
- @status = :done
- logout
- end
end
end
end
class StatusRequest < Request
+ attr_reader :mailbox
+
def initialize(session, mailbox)
super(session)