Author: remi
Date: 2009-02-10 13:30:55 +0100 (Tue, 10 Feb 2009)
New Revision: 3597
Modified:
software_suite_v2/tuxware/pytuxisalive/trunk/src/tuxisalive/lib/httpserver/TDClientController.py
Log:
* improved server stability when it freezing for many seconds
Modified:
software_suite_v2/tuxware/pytuxisalive/trunk/src/tuxisalive/lib/httpserver/TDClientController.py
===================================================================
---
software_suite_v2/tuxware/pytuxisalive/trunk/src/tuxisalive/lib/httpserver/TDClientController.py
2009-02-10 11:30:06 UTC (rev 3596)
+++
software_suite_v2/tuxware/pytuxisalive/trunk/src/tuxisalive/lib/httpserver/TDClientController.py
2009-02-10 12:30:55 UTC (rev 3597)
@@ -33,47 +33,69 @@
TDCC_INVALID_CLIENT = -1
-CLIENT_ACTIVITY_TIMEOUT = 5.0
+CLIENT_ACTIVITY_TIMEOUT = 10.0
class TDClientController(object):
def __init__(self):
self.__accessController = TDAccessController()
self.__clients = []
+ self.__clientsMutex = threading.Lock()
self.__logger = SimpleLogger("httpserver")
self.__logger.setLevel(LOG_LEVEL_INFO)
self.__logger.setTarget(LOG_TARGET_BOTH)
def destroy(self):
- for client in self.__clients:
- client.destroy()
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ client.destroy()
+ except:
+ pass
+
+ def getClientsList(self):
+ self.__clientsMutex.acquire()
+ clients = copy.copy(self.__clients)
+ self.__clientsMutex.release()
+ return clients
+ def setClientsList(self):
+ self.__clientsMutex.acquire()
+ self.__clients = copy.copy(clients)
+ self.__clientsMutex.release()
+
def clientExists(self, idClient):
- for client in self.__clients:
- if client.getId() == idClient:
- return True
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ if client.getId() == idClient:
+ return True
+ except:
+ pass
return False
def getClient(self, idClient):
if self.clientExists(idClient):
- for client in self.__clients:
- if client.getId() == idClient:
- return client
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ if client.getId() == idClient:
+ return client
+ except:
+ pass
else:
return None
- def getClients(self):
- result = []
- for client in self.__clients:
- result.append(client)
+ def getClients(self):
+ return getClientsList()
- return result
-
def __createClient(self, id, level, name, passwd):
newClient = TDClientObject(id, level, self.__accessController,
name, passwd)
+ self.__clientsMutex.acquire()
self.__clients.append(newClient)
+ self.__clientsMutex.release()
def createClient(self, clientLevel, name, passwd):
newId = TDCC_INVALID_CLIENT
@@ -112,25 +134,42 @@
def destroyClient(self, clientId):
if self.clientExists(clientId):
client = self.getClient(clientId)
- client.destroy()
+ try:
+ client.destroy()
+ except:
+ pass
+ self.__clientsMutex.acquire()
self.__clients.remove(client)
+ self.__clientsMutex.release()
self.__logger.logInfo("Client (%d) was destroyed." % clientId)
def refreshClientsTable(self):
clientsToDestroy = []
- for client in self.__clients:
- if not client.checkActivity():
- clientsToDestroy.append(client)
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ if not client.checkActivity():
+ clientsToDestroy.append(client)
+ except:
+ pass
for client in clientsToDestroy:
self.destroyClient(client.getId())
def pushUserEvents(self, events = []):
- for client in self.__clients:
- client.pushUserEvents(events)
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ client.pushUserEvents(events)
+ except:
+ pass
def pushMiscEvents(self, events = []):
- for client in self.__clients:
- client.pushMiscEvents(events)
+ clients = self.getClientsList()
+ for client in clients:
+ try:
+ client.pushMiscEvents(events)
+ except:
+ pass
self.refreshClientsTable()
class TDClientObject(object):
------------------------------------------------------------------------------
Create and Deploy Rich Internet Apps outside the browser with Adobe(R)AIR(TM)
software. With Adobe AIR, Ajax developers can use existing skills and code to
build responsive, highly engaging applications that combine the power of local
resources and data with the reach of the web. Download the Adobe AIR SDK and
Ajax docs to start building applications today-http://p.sf.net/sfu/adobe-com
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn