diff --git a/agent/app.py b/agent/app.py index 4344df3..4240250 100755 --- a/agent/app.py +++ b/agent/app.py @@ -1,4 +1,3 @@ -#! /usr/bin/env python2.4 # # Copyright (c) 2008 Helmut Merz helmutm@cy55.de # @@ -23,32 +22,10 @@ Agent application. $Id$ """ -import os -from twisted.internet import reactor +from twisted.application import service -from cybertools.agent.base.agent import Master +from cybertools.agent import main -def getConfig(): - agentHome = os.path.abspath(os.path.dirname(__file__)) - configName = 'agent.cfg' - configFile = open(os.path.join(agentHome, configName)) - config = configFile.read() - configFile.close() - return config - - -def start(): - master = Master(getConfig()) - master.setup() - - print 'Starting agent application...' - print 'Using controllers %s.' % ', '.join(master.config.controller.names) - - reactor.run() - - print 'Agent application has been stopped.' - - -if __name__ == '__main__': - start() +application = main.application = service.Application('Agent Application') +main.setup() diff --git a/agent/control/cmdline.py b/agent/control/cmdline.py index e139b57..8e950c1 100644 --- a/agent/control/cmdline.py +++ b/agent/control/cmdline.py @@ -22,6 +22,7 @@ Base/sample controller implementation. $Id$ """ +from twisted.application import service, internet from twisted.internet import protocol, reactor, stdio from twisted.protocols import basic from zope.interface import implements @@ -44,12 +45,15 @@ controllers.register(CmdlineController, Master, name='cmdline') class TelnetController(CmdlineController): - delimiter = '\r\n' - def setup(self): super(CmdlineController, self).setup() port = self.agent.config.controller.telnet.port - reactor.listenTCP(port, TelnetServerFactory(self)) + from cybertools.agent.main import application + if application is None: + reactor.listenTCP(port, TelnetServerFactory(self)) + else: + service = internet.TCPServer(port, TelnetServerFactory(self)) + service.setServiceParent(application) controllers.register(TelnetController, Master, name='telnet') @@ -61,6 +65,7 @@ class CmdlineProtocol(basic.LineReceiver): def connectionMade(self): self.sendLine("Agent console. Type 'help' for help.") + self.transport.write('> ') def lineReceived(self, line): if not line: @@ -77,6 +82,7 @@ class CmdlineProtocol(basic.LineReceiver): method(*args) except Exception, e: self.sendLine('Error: ' + str(e)) + self.transport.write('> ') def do_help(self, command=None): if command: diff --git a/agent/main.py b/agent/main.py new file mode 100755 index 0000000..89475f4 --- /dev/null +++ b/agent/main.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python2.4 +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Agent application. + +$Id$ +""" + +import os +from twisted.internet import reactor + +from cybertools.agent.base.agent import Master + + +application = None # contains application object if started via twistd + + +def getConfig(): + agentHome = os.path.abspath(os.path.dirname(__file__)) + configName = 'agent.cfg' + configFile = open(os.path.join(agentHome, configName)) + config = configFile.read() + configFile.close() + return config + + +def setup(): + master = Master(getConfig()) + master.setup() + print 'Starting agent application...' + print 'Using controllers %s.' % ', '.join(master.config.controller.names) + + +def startReactor(): + reactor.run() + print 'Agent application has been stopped.' + + +if __name__ == '__main__': + setup() + startReactor()