~stefanor/ibid/timeout-344882

« back to all changes in this revision

Viewing changes to ibid/source/irc.py

  • Committer: Stefano Rivera
  • Date: 2009-04-18 19:05:18 UTC
  • Revision ID: stefano@rivera.za.net-20090418190518-tdhroevtvbrs61dh
IRC Idle Timeout

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
from pkg_resources import resource_exists, resource_string
11
11
 
12
12
import ibid
13
 
from ibid.config import Option, IntOption, BoolOption
 
13
from ibid.config import Option, IntOption, BoolOption, FloatOption
14
14
from ibid.models import Credential
15
15
from ibid.source import IbidSourceFactory
16
16
from ibid.event import Event
26
26
        self.factory.send = self.send
27
27
        self.factory.proto = self
28
28
        self.auth_callbacks = {}
 
29
        self._timeout_deferred = reactor.callLater(self.factory.idle_timeout, self.factory.clientConnectionLost, self.factory, 'idle timeout')
29
30
        self.factory.log.info(u"Connected")
30
31
 
31
32
    def connectionLost(self, reason):
32
33
        self.factory.log.info(u"Disconnected (%s)", reason)
33
34
        irc.IRCClient.connectionLost(self, reason)
34
35
 
 
36
    def dataReceived(self, data):
 
37
        irc.IRCClient.dataReceived(self, data)
 
38
        self._timeout_deferred.reset(self.factory.idle_timeout)
 
39
 
35
40
    def signedOn(self):
36
41
        if self.factory.modes:
37
42
            self.mode(self.nickname, True, self.factory.modes.encode('utf-8'))
155
160
    nick = Option('nick', 'IRC nick', ibid.config['botname'])
156
161
    modes = Option('modes', 'User modes to set')
157
162
    channels = Option('channels', 'Channels to autojoin', [])
 
163
    idle_timeout = FloatOption('idle_timeout', 'Seconds idle before disconnecting', 300)
158
164
 
159
165
    def __init__(self, name):
160
166
        IbidSourceFactory.__init__(self, name)