pvl/irker/irker.py
author Tero Marttila <terom@paivola.fi>
Tue, 19 Feb 2013 19:27:51 +0200
changeset 220 e533260bcefd
parent 110 af87b706e4a3
permissions -rw-r--r--
pvl-verkko: 0.4.1
92
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
"""
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
    Twisted application
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
"""
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
import sys
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
from twisted.application import internet, service
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
from twisted.internet import reactor, endpoints, defer
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
from twisted.python import usage, log
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import urlparse
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
import pvl.irker.irk
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
import pvl.irker.irc
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
110
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    16
def myusername ():
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    17
    """
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    18
        Return username current process is running under.
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    19
    """
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    20
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    21
    import os, pwd
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    22
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    23
    return pwd.getpwuid(os.getuid()).pw_name
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    24
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    25
92
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
class Options (usage.Options) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
    optParameters = [
110
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    28
            [ 'irc-nickname', 'n',  pvl.irker.irc.IRCFactory.NICKNAME,  "Default IRC nickname"                  ],
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    29
            [ 'irc-username', 'u',  myusername(),                       "IRC username (default: system user)"   ],
92
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
    ]
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    def __init__ (self) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
        usage.Options.__init__(self)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
        self.listen_tcp = []
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
        self.connect = []
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
        self.target = []
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
        self.privmsg = []
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
    def opt_listen_tcp (self, listen) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
            Twisted endpoint.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        if ':' in listen :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
            host, port = listen.split(':')
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        else :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
            host, port = '', listen
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        port = int(port)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
        self.listen_tcp.append((host, port))
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
    def opt_connect (self, connect) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
            Connect to given target.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
        self.connect.append(urlparse.urlparse(connect))
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    def opt_target (self, target) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
            Join given target.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        self.target.append(urlparse.urlparse(target))
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
    def opt_privmsg (self, privmsg) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
            Send message to targets
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
        """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
        self.privmsg.append(privmsg)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
@defer.inlineCallbacks
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
def connect (irc, connect) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
        Connect to given urls.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
            
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
    try :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
        clients = yield defer.gatherResults([irc.client(url) for url in connect])
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
    except Exception as ex :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
        log.err(ex)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
        return
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
    for client in clients :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
        log.msg('--connect', client)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
@defer.inlineCallbacks
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
def target (irc, target, privmsg) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
        Connect to given urls.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
            
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
    try :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
        targets = yield defer.gatherResults([irc.target(url) for url in target])
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
    except Exception as ex :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
        log.err(ex)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        return
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
    for target in targets :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        log.msg('--target', target)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        target.privmsg(*privmsg)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
def makeService (options) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
        Return a Service for running irk -> irc.
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
    """
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    s = service.MultiService()
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
    
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
    # IRC
110
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
   117
    irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], options['irc-username']) 
92
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
 
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
    connect(irc, options.connect)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
    target(irc, options.target, options.privmsg)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
    # IRK
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
    irk = pvl.irker.irk.IrkFactory(irc)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
 
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
    for host, port in options.listen_tcp :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
        ss = internet.TCPServer(port, irk, interface=host)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
        log.msg("--listen", port)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        ss.setServiceParent(s)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
   
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
    # return the service collection
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
    return s
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
 
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
def main (args) :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
    options = Options()
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
    options.parseOptions(args)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
    # logging
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
    log.startLogging(sys.stderr, setStdout=False)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
    # connect
110
af87b706e4a3 pvl.irker: implement --irc-username option; improve handling of register errors
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
   143
    irc = pvl.irker.irc.IRCFactory(options['irc-nickname'], options['irc-username'])
92
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
    
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
    connect(irc, options.connect)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
    target(irc, options.target, options.privmsg)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   148
    # listen
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
    irk = pvl.irker.irk.IrkFactory(irc)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
    for host, port in options.listen_tcp :
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
        endpoint = endpoints.TCP4ServerEndpoint(reactor, port, interface=host)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
        log.msg("listen:", endpoint)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
        endpoint.listen(irk)
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
    # go
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
    reactor.run()
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
    return 0
715ca17d1260 pvl.irker.irker: implement bin and twisted plugin semantics
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162