diff options
Diffstat (limited to 'bitbake-dev/lib/bb/server/xmlrpc.py')
| -rw-r--r-- | bitbake-dev/lib/bb/server/xmlrpc.py | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/bitbake-dev/lib/bb/server/xmlrpc.py b/bitbake-dev/lib/bb/server/xmlrpc.py index c5937abd66..b4d69f7be3 100644 --- a/bitbake-dev/lib/bb/server/xmlrpc.py +++ b/bitbake-dev/lib/bb/server/xmlrpc.py | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | 33 | ||
| 34 | import bb | 34 | import bb |
| 35 | import xmlrpclib | 35 | import xmlrpclib |
| 36 | from bb import daemonize | ||
| 37 | from bb.ui import uievent | ||
| 36 | 38 | ||
| 37 | DEBUG = False | 39 | DEBUG = False |
| 38 | 40 | ||
| @@ -114,26 +116,34 @@ class BitBakeServer(SimpleXMLRPCServer): | |||
| 114 | Serve Requests. Overloaded to honor a quit command | 116 | Serve Requests. Overloaded to honor a quit command |
| 115 | """ | 117 | """ |
| 116 | self.quit = False | 118 | self.quit = False |
| 119 | self.timeout = 0 # Run Idle calls for our first callback | ||
| 117 | while not self.quit: | 120 | while not self.quit: |
| 118 | #print "Idle queue length %s" % len(self._idlefuns) | 121 | #print "Idle queue length %s" % len(self._idlefuns) |
| 119 | if len(self._idlefuns) == 0: | ||
| 120 | self.timeout = None | ||
| 121 | else: | ||
| 122 | self.timeout = 0 | ||
| 123 | self.handle_request() | 122 | self.handle_request() |
| 124 | #print "Idle timeout, running idle functions" | 123 | #print "Idle timeout, running idle functions" |
| 124 | nextsleep = None | ||
| 125 | for function, data in self._idlefuns.items(): | 125 | for function, data in self._idlefuns.items(): |
| 126 | try: | 126 | try: |
| 127 | retval = function(self, data, False) | 127 | retval = function(self, data, False) |
| 128 | if not retval: | 128 | if retval is False: |
| 129 | del self._idlefuns[function] | 129 | del self._idlefuns[function] |
| 130 | elif retval is True: | ||
| 131 | nextsleep = 0 | ||
| 132 | elif nextsleep is 0: | ||
| 133 | continue | ||
| 134 | elif nextsleep is None: | ||
| 135 | nextsleep = retval | ||
| 136 | elif retval < nextsleep: | ||
| 137 | nextsleep = retval | ||
| 130 | except SystemExit: | 138 | except SystemExit: |
| 131 | raise | 139 | raise |
| 132 | except: | 140 | except: |
| 133 | import traceback | 141 | import traceback |
| 134 | traceback.print_exc() | 142 | traceback.print_exc() |
| 135 | pass | 143 | pass |
| 136 | 144 | if nextsleep is None and len(self._idlefuns) > 0: | |
| 145 | nextsleep = 0 | ||
| 146 | self.timeout = nextsleep | ||
| 137 | # Tell idle functions we're exiting | 147 | # Tell idle functions we're exiting |
| 138 | for function, data in self._idlefuns.items(): | 148 | for function, data in self._idlefuns.items(): |
| 139 | try: | 149 | try: |
| @@ -143,3 +153,31 @@ class BitBakeServer(SimpleXMLRPCServer): | |||
| 143 | 153 | ||
| 144 | self.server_close() | 154 | self.server_close() |
| 145 | return | 155 | return |
| 156 | |||
| 157 | class BitbakeServerInfo(): | ||
| 158 | def __init__(self, server): | ||
| 159 | self.host = server.host | ||
| 160 | self.port = server.port | ||
| 161 | |||
| 162 | class BitBakeServerFork(): | ||
| 163 | def __init__(self, serverinfo, command, logfile): | ||
| 164 | daemonize.createDaemon(command, logfile) | ||
| 165 | |||
| 166 | class BitBakeServerConnection(): | ||
| 167 | def __init__(self, serverinfo): | ||
| 168 | self.connection = xmlrpclib.Server("http://%s:%s" % (serverinfo.host, serverinfo.port), allow_none=True) | ||
| 169 | self.events = uievent.BBUIEventQueue(self.connection) | ||
| 170 | |||
| 171 | def terminate(self): | ||
| 172 | # Don't wait for server indefinitely | ||
| 173 | import socket | ||
| 174 | socket.setdefaulttimeout(2) | ||
| 175 | try: | ||
| 176 | self.events.system_quit() | ||
| 177 | except: | ||
| 178 | pass | ||
| 179 | try: | ||
| 180 | self.connection.terminateServer() | ||
| 181 | except: | ||
| 182 | pass | ||
| 183 | |||
