nicer thread startup

This commit is contained in:
Ward Wouts 2005-03-01 19:55:32 +00:00
parent 220268d5af
commit 429d66c9b1

View file

@ -1,4 +1,4 @@
# $Dwarf: article.rb,v 1.108 2005/02/06 13:42:03 ward Exp $ # $Dwarf: article.rb,v 1.109 2005/02/07 08:53:43 ward Exp $
# $Source$ # $Source$
# #
@ -28,6 +28,68 @@ class ArticleError < RuntimeError; end
class TempError < ArticleError; end class TempError < ArticleError; end
class PermError < ArticleError; end class PermError < ArticleError; end
module Net
class KANNTP < Net::NNTP
def initialize(host, port=nil, user=nil, password=nil, readermode=nil)
@host = host
@semaphore = Mutex.new
@resettime = 60
@timecounter = @resettime
@thr = Thread.new{
Thread.pass
while true
# puts "timecounter #{@timecounter} #{@host}"
if @timecounter > 0
@timecounter -= 5
sleep 5
else
sendka
sleep 5
end
end
}
super
end
def putline(line)
# puts "timerreset #{@host}"
@timecounter = @resettime
super
end
def longcmd(line)
@semaphore.synchronize{
return super
}
end
def shortcmd(line)
@semaphore.synchronize{
return super
}
end
def setresettime(time)
@resettime = time
end
def sendka
# puts "SENDING KEEP ALIVE TO #{@host}"
res = shortcmd("DATE")
# puts res
end
def quit
@thr.exit
super
end
private :sendka
end # class KANNTP
end # module Net
class Article class Article
Debuglevel = 1 Debuglevel = 1
@ -54,10 +116,10 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc")
p Time.now p Time.now
begin begin
timeout(60) do timeout(60) do
@connections[server]["nntp"] = Net::NNTP.new(server) @connections[server]["nntp"] = Net::KANNTP.new(server)
end end
resp = @connections[server]["nntp"].mode_reader resp = @connections[server]["nntp"].mode_reader
rescue TimeoutError rescue TimeoutError, Errno::ECONNRESET
sleep 3 sleep 3
retry retry
end end
@ -85,7 +147,7 @@ def reconnect(server)
sleep 3 sleep 3
#timeout(180) do #timeout(180) do
timeout(60) do timeout(60) do
@connections[server]["nntp"] = Net::NNTP.new(server) @connections[server]["nntp"] = Net::KANNTP.new(server)
end end
resp = @connections[server]["nntp"].mode_reader resp = @connections[server]["nntp"].mode_reader
rescue SocketError, Errno::EINVAL, EOFError, Errno::ETIMEDOUT, TimeoutError rescue SocketError, Errno::EINVAL, EOFError, Errno::ETIMEDOUT, TimeoutError