provide main and app modules for application startup; extend TelnetController to support twistd services
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2497 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									771cf29cc2
								
							
						
					
					
						commit
						770a983a7f
					
				
					 3 changed files with 71 additions and 30 deletions
				
			
		
							
								
								
									
										31
									
								
								agent/app.py
									
										
									
									
									
								
							
							
						
						
									
										31
									
								
								agent/app.py
									
										
									
									
									
								
							|  | @ -1,4 +1,3 @@ | ||||||
| #! /usr/bin/env python2.4 |  | ||||||
| # | # | ||||||
| #  Copyright (c) 2008 Helmut Merz helmutm@cy55.de | #  Copyright (c) 2008 Helmut Merz helmutm@cy55.de | ||||||
| # | # | ||||||
|  | @ -23,32 +22,10 @@ Agent application. | ||||||
| $Id$ | $Id$ | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| import os | from twisted.application import service | ||||||
| from twisted.internet import reactor |  | ||||||
| 
 | 
 | ||||||
| from cybertools.agent.base.agent import Master | from cybertools.agent import main | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def getConfig(): | application = main.application = service.Application('Agent Application') | ||||||
|     agentHome = os.path.abspath(os.path.dirname(__file__)) | main.setup() | ||||||
|     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() |  | ||||||
|  |  | ||||||
|  | @ -22,6 +22,7 @@ Base/sample controller implementation. | ||||||
| $Id$ | $Id$ | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
|  | from twisted.application import service, internet | ||||||
| from twisted.internet import protocol, reactor, stdio | from twisted.internet import protocol, reactor, stdio | ||||||
| from twisted.protocols import basic | from twisted.protocols import basic | ||||||
| from zope.interface import implements | from zope.interface import implements | ||||||
|  | @ -44,12 +45,15 @@ controllers.register(CmdlineController, Master, name='cmdline') | ||||||
| 
 | 
 | ||||||
| class TelnetController(CmdlineController): | class TelnetController(CmdlineController): | ||||||
| 
 | 
 | ||||||
|     delimiter = '\r\n' |  | ||||||
| 
 |  | ||||||
|     def setup(self): |     def setup(self): | ||||||
|         super(CmdlineController, self).setup() |         super(CmdlineController, self).setup() | ||||||
|         port = self.agent.config.controller.telnet.port |         port = self.agent.config.controller.telnet.port | ||||||
|  |         from cybertools.agent.main import application | ||||||
|  |         if application is None: | ||||||
|             reactor.listenTCP(port, TelnetServerFactory(self)) |             reactor.listenTCP(port, TelnetServerFactory(self)) | ||||||
|  |         else: | ||||||
|  |             service = internet.TCPServer(port, TelnetServerFactory(self)) | ||||||
|  |             service.setServiceParent(application) | ||||||
| 
 | 
 | ||||||
| controllers.register(TelnetController, Master, name='telnet') | controllers.register(TelnetController, Master, name='telnet') | ||||||
| 
 | 
 | ||||||
|  | @ -61,6 +65,7 @@ class CmdlineProtocol(basic.LineReceiver): | ||||||
| 
 | 
 | ||||||
|     def connectionMade(self): |     def connectionMade(self): | ||||||
|         self.sendLine("Agent console. Type 'help' for help.") |         self.sendLine("Agent console. Type 'help' for help.") | ||||||
|  |         self.transport.write('> ') | ||||||
| 
 | 
 | ||||||
|     def lineReceived(self, line): |     def lineReceived(self, line): | ||||||
|         if not line: |         if not line: | ||||||
|  | @ -77,6 +82,7 @@ class CmdlineProtocol(basic.LineReceiver): | ||||||
|                 method(*args) |                 method(*args) | ||||||
|             except Exception, e: |             except Exception, e: | ||||||
|                 self.sendLine('Error: ' + str(e)) |                 self.sendLine('Error: ' + str(e)) | ||||||
|  |         self.transport.write('> ') | ||||||
| 
 | 
 | ||||||
|     def do_help(self, command=None): |     def do_help(self, command=None): | ||||||
|         if command: |         if command: | ||||||
|  |  | ||||||
							
								
								
									
										58
									
								
								agent/main.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								agent/main.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -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() | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm