nicer thread startup
This commit is contained in:
parent
220268d5af
commit
429d66c9b1
1 changed files with 66 additions and 4 deletions
|
|
@ -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$
|
||||
|
||||
#
|
||||
|
|
@ -28,6 +28,68 @@ class ArticleError < RuntimeError; end
|
|||
class TempError < 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
|
||||
|
||||
Debuglevel = 1
|
||||
|
|
@ -54,10 +116,10 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc")
|
|||
p Time.now
|
||||
begin
|
||||
timeout(60) do
|
||||
@connections[server]["nntp"] = Net::NNTP.new(server)
|
||||
@connections[server]["nntp"] = Net::KANNTP.new(server)
|
||||
end
|
||||
resp = @connections[server]["nntp"].mode_reader
|
||||
rescue TimeoutError
|
||||
rescue TimeoutError, Errno::ECONNRESET
|
||||
sleep 3
|
||||
retry
|
||||
end
|
||||
|
|
@ -85,7 +147,7 @@ def reconnect(server)
|
|||
sleep 3
|
||||
#timeout(180) do
|
||||
timeout(60) do
|
||||
@connections[server]["nntp"] = Net::NNTP.new(server)
|
||||
@connections[server]["nntp"] = Net::KANNTP.new(server)
|
||||
end
|
||||
resp = @connections[server]["nntp"].mode_reader
|
||||
rescue SocketError, Errno::EINVAL, EOFError, Errno::ETIMEDOUT, TimeoutError
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue