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 | |||