PERFORCE change 123532 for review
Andrew Turner
andrew at FreeBSD.org
Sun Jul 15 12:02:30 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=123532
Change 123532 by andrew at andrew_hermies on 2007/07/15 12:01:54
When sending a call hold the response lock until the response is set
Wait for the response lock to be released when issuing a call
Create a response object when a response is found and add it to the call object
When the data is a child of an array append it to the array
Affected files ...
.. //depot/projects/soc2007/andrew-update/frontend/facund/computer.py#4 edit
.. //depot/projects/soc2007/andrew-update/frontend/facund/network/__init__.py#8 edit
Differences ...
==== //depot/projects/soc2007/andrew-update/frontend/facund/computer.py#4 (text+ko) ====
@@ -97,6 +97,10 @@
call = facund.Call("list_updates", args)
self.__connection.doCall(call)
+ # Wait for the response
+ call.acquireLock()
+ call.releaseLock()
+ return call.getResponse()
def connect(self):
'''Connects to the remote computer'''
==== //depot/projects/soc2007/andrew-update/frontend/facund/network/__init__.py#8 (text+ko) ====
@@ -35,6 +35,7 @@
self.isReady = False
self.__data = None
+ self.__calls = {}
self.bufSize = 1024
self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
@@ -50,7 +51,7 @@
# Mark the class as ready and able to disconnect
self.isReady = True
- self.socket.send("<call name=\"ping\" id=\"1\"/>")
+ #self.socket.send("<call name=\"ping\" id=\"1\"/>")
def disconnect(self):
if self.isReady:
@@ -65,9 +66,11 @@
self.parser.close()
def doCall(self, call):
+ print call.getID()
+ call.acquireLock()
+ self.__calls[str(call.getID())] = call
self.socket.send(call.getCall())
-
def interact(self):
'''Reads data from the connection and passes it to the
XML parser'''
@@ -103,6 +106,21 @@
data.setParent(self.__data)
self.__data = data
+ elif name == "response":
+ self.__responseID = None
+ self.__responseMessage = None
+ self.__responseCode = None
+
+ for attr in attributes.items():
+ if attr[0] == "id":
+ self.__responseID = int(attr[1])
+ elif attr[0] == "code":
+ print self.__responseCode
+ elif attr[0] == "message":
+ self.__responseMessage = str(attr[1])
+ else:
+ print attr
+
elif name == "facund-server":
self.__connected_lock.acquire()
@@ -112,11 +130,20 @@
if name == "data":
data = self.__data.getParent()
if data is not None:
+ data.append(self.__data)
self.__data = data
elif name == "response":
- print str(self.__data)
- del self.__data
+ response = facund.Response(self.__responseID,
+ self.__responseMessage, self.__responseCode,
+ self.__data)
+
+ # TODO: Check this is a valid item
+ call = self.__calls[str(self.__responseID)]
+ call.setResponse(response)
+ call.releaseLock()
+ self.__calls[self.__responseID] = None
+
self.__data = None
elif name == "facund-server":
More information about the p4-projects
mailing list