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$
|
# $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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue