summaryrefslogtreecommitdiffstats
path: root/bitbake-dev/lib/bb/server/xmlrpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake-dev/lib/bb/server/xmlrpc.py')
-rw-r--r--bitbake-dev/lib/bb/server/xmlrpc.py50
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
34import bb 34import bb
35import xmlrpclib 35import xmlrpclib
36from bb import daemonize
37from bb.ui import uievent
36 38
37DEBUG = False 39DEBUG = 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
157class BitbakeServerInfo():
158 def __init__(self, server):
159 self.host = server.host
160 self.port = server.port
161
162class BitBakeServerFork():
163 def __init__(self, serverinfo, command, logfile):
164 daemonize.createDaemon(command, logfile)
165
166class 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