X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fircsocket.rb;h=36a223f9d52cc456efc1179835d143184e51f2ee;hb=8115edef0169d95f0ebb64d77364e346e9452099;hp=6039b9a6f84aa226a4ff68d8528e71481a4f6bf5;hpb=5aa23b55a4547257580d047118ec4019a93499f7;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/ircsocket.rb b/lib/rbot/ircsocket.rb index 6039b9a6..36a223f9 100644 --- a/lib/rbot/ircsocket.rb +++ b/lib/rbot/ircsocket.rb @@ -1,10 +1,18 @@ +#-- vim:sw=2:et +#++ +# +# :title: IRC Socket +# +# This module implements the IRC socket interface, including IRC message +# penalty computation and the message queue system + require 'monitor' class ::String # Calculate the penalty which will be assigned to this message # by the IRCd def irc_send_penalty - # According to eggrdop, the initial penalty is + # According to eggdrop, the initial penalty is penalty = 1 + self.size/100 # on everything but UnderNET where it's # penalty = 2 + self.size/120 @@ -238,6 +246,9 @@ module Irc # normalized uri of the current server attr_reader :server_uri + # penalty multiplier (percent) + attr_accessor :penalty_pct + # default trivial filter class class IdentityFilter def in(x) @@ -267,11 +278,8 @@ module Irc @spooler = false @lines_sent = 0 @lines_received = 0 - if opts.kind_of?(Hash) and opts.key?(:ssl) - @ssl = opts[:ssl] - else - @ssl = false - end + @ssl = opts[:ssl] + @penalty_pct = opts[:penalty_pct] || 100 end def connected? @@ -429,7 +437,7 @@ module Irc @sock.syswrite actual @last_send = now @flood_send = now if @flood_send < now - @flood_send += message.irc_send_penalty if penalty + @flood_send += message.irc_send_penalty*@penalty_pct/100.0 if penalty @lines_sent += 1 end rescue Exception => e