idle (timeout = nil, &response_handler)
public
Sends an IDLE command that waits for notifications of new or expunged messages. Yields
responses from the server during the IDLE.
Use #idle_done () to leave IDLE.
If timeout is given, this method returns after timeout
seconds passed. timeout can be used for keep-alive. For example,
the following code checks the connection for each 60 seconds.
loop do
imap . idle ( 60 ) do | res |
...
end
end
Show source # File lib/net/imap.rb, line 952
def idle(timeout = nil, &response_handler)
raise LocalJumpError, "no block given" unless response_handler
response = nil
synchronize do
tag = Thread.current[:net_imap_tag] = generate_tag
put_string("#{tag} IDLE#{CRLF}")
begin
add_response_handler(response_handler)
@idle_done_cond = new_cond
@idle_done_cond.wait(timeout)
@idle_done_cond = nil
if @receiver_thread_terminating
raise @exception || Net::IMAP::Error.new("connection closed")
end
ensure
unless @receiver_thread_terminating
remove_response_handler(response_handler)
put_string("DONE#{CRLF}")
response = get_tagged_response(tag, "IDLE")
end
end
end
return response
end