SF.net SVN: fclient: [208] trunk/sandbox/fcp/fcp2_0_client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <ju...@us...> - 2008-02-12 09:50:19
|
Revision: 208
http://fclient.svn.sourceforge.net/fclient/?rev=208&view=rev
Author: jurner
Date: 2008-02-12 01:50:22 -0800 (Tue, 12 Feb 2008)
Log Message:
-----------
listeners get now informed on regular client closes
Modified Paths:
--------------
trunk/sandbox/fcp/fcp2_0_client.py
Modified: trunk/sandbox/fcp/fcp2_0_client.py
===================================================================
--- trunk/sandbox/fcp/fcp2_0_client.py 2008-02-12 09:47:25 UTC (rev 207)
+++ trunk/sandbox/fcp/fcp2_0_client.py 2008-02-12 09:50:22 UTC (rev 208)
@@ -8,8 +8,7 @@
@note: The client implementation never uses or watches the global queue. No implementation
should ever do so. Global is evil.
-@note: the client is not thread save, nor will it ever be. If you need that, create another client
-and connect it to the node.
+@note: the client is not thread save.
Sample code. Connect to the freenet node::
@@ -316,6 +315,30 @@
## private methods
##
###############################################################
+ def _close(self, msg):
+ """Closes the client
+ @param msg: message to pass to the ClientDisconnected event or None to not inform listeners
+ """
+ self._log.info(consts.LogMessages.ClientClose)
+
+ # clean left over DDA test tmp files
+ for initialRequest in self._ddaTests:
+ if initialRequest['FcTestDDA'].get('TmpFile', None) is not None:
+ saveRemoveFile(initialRequest['FcTestDDA']['TmpFile'])
+
+ self._ddaTests = []
+ self._requests = {}
+
+ if self._socket is None:
+ #TODO: complain or not?
+ pass
+ else:
+ self._socket.close()
+ self._socket = None
+ if msg is not None:
+ self.events.ClientDisconnected(msg)
+
+
def _finalizeRequest(self, msg, request, event):
"""Finalzes a request
@param msg: message that is the reason for finalizing
@@ -457,19 +480,13 @@
"""Closes the client
@note: make shure to call close() when done with the client
"""
- self._log.info(consts.LogMessages.ClientClose)
- if self._socket is not None:
- self._socket.close()
- self._socket = None
+ msg = self.Message(
+ consts.Message.ClientDisconnected,
+ DisconnectReason=consts.DisconnectReason.Close,
+ Param=None,
+ )
+ self._close(msg)
- # clean left over DDA test tmp files
- for initialRequest in self._ddaTests:
- if initialRequest['FcTestDDA'].get('TmpFile', None) is not None:
- saveRemoveFile(initialRequest['FcTestDDA']['TmpFile'])
-
- self._ddaTests = []
- self._requests = {}
-
def closeFreenet(self):
"""Shuts down the freenet node"""
@@ -506,7 +523,7 @@
# try to Connect socket
if self._socket is not None:
- self.close()
+ self._close(None)
# poll untill freenet responds
timeElapsed = 0
@@ -548,13 +565,12 @@
if self.versionCheckNodeHello(msg):
self.events.ClientConnected(msg)
else:
- self.close()
- msg = self.Message(
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.VersionMissmatch,
Param=msg,
)
- self.events.ClientDisconnected(msg)
+ self._close(disconnectMsg)
yield self._nodeHelloMessage
raise StopIteration
@@ -568,14 +584,13 @@
timeElapsed += timeout
time.sleep(timeout)
- msg = self.Message(
+ self._log.info(consts.LogMessages.ConnectingFailed)
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.ConnectingFailed,
Param=None,
)
- self.events.ClientDisconnected(msg)
- self._log.info(consts.LogMessages.ConnectingFailed)
- self.close()
+ self._close(disconnectMsg)
raise StopIteration
@@ -585,6 +600,10 @@
"""
return self._connectionName
+ def getLogger(self):
+ """Returns the L{logging.Logger} used by the client"""
+ return self._log
+
def setConnectionName(self, connectionName=None):
"""Sets the connection name to be used by the client
@param connectionName: (str) connection name or None to use an arbitrary connection name
@@ -671,13 +690,12 @@
elif msg.name == consts.Message.ProtocolError:
code = msg['Code']
if code == consts.ProtocolError.ShuttingDown:
- self.close()
- msg = self.Message(
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.Shutdown,
Param=None,
)
- self.events.ClientDisconnected(msg)
+ self._close(disconnectMsg)
return True
@@ -1188,13 +1206,12 @@
##
####################################################
elif msg.name == consts.Message.CloseConnectionDuplicateClientName:
- self.close()
- msg = self.Message(
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.DuplicateClientName,
Param=None,
)
- self.events.ClientDisconnected(msg)
+ self._close(disconnectMsg)
return True
@@ -1237,12 +1254,12 @@
if msg.name == consts.Message.ClientSocketDied:
self._log.info(consts.LogMessages.SocketDied)
if dispatch:
- msg = self.Message(
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.SocketDied,
Param=msg,
)
- self.events.ClientDisconnected(msg)
+ self._close(disconnectMsg)
#raise socket.error(msg['Param']['Details'])
elif msg.name == consts.Message.ClientSocketTimeout:
@@ -1317,13 +1334,12 @@
msg.send(self._socket)
except socket.error, d:
self._log.info(consts.LogMessages.SocketDied)
- self.close()
- msg = self.Message(
+ disconnectMsg = self.Message(
consts.Message.ClientDisconnected,
DisconnectReason=consts.DisconnectReason.SocketDied,
Param=self.Message(consts.Message.ClientSocketDied, Exception=socket.error, Details=d)
)
- self.events.ClientDisconnected(msg)
+ self._close(disconnectMsg)
raise socket.error(d)
return msg
@@ -1661,12 +1677,14 @@
return msg['Identifier']
def clientPut(self,
+ requestType,
uri,
- requestType,
- userData,
- persistentUserData,
- data,
- **messageParams):
+ data=None,
+ persistentUserData='',
+ userData=None,
+
+ **messageParams
+ ):
msg = self.Message(consts.Message.ClientPut, URI=uri)
for paramName, value in messageParams.items():
@@ -1706,12 +1724,13 @@
@param data: ()
"""
return self.clientPut(
+ consts.RequestType.Put,
consts.KeyType.CHK,
- consts.RequestType.Put,
- userData,
- persistentUserData,
- data,
+ data=data,
+ persistentUserData=persistentUserData,
+ userData=userData,
+
# fcp params
ContentType=contentType,
DataLength=len(data),
@@ -1733,9 +1752,9 @@
def chkPutFile(self,
+ filename,
contentType=None,
dontCompress=None,
- filename=None,
maxRetries=None,
persistence=consts.Persistence.Connection,
priorityClass=consts.Priority.Medium,
@@ -1746,16 +1765,18 @@
):
"""
- @param filename: (str) filename to append to the CHK key or None (may not contain slashes)
+ @param TargetFilename: (str) filename to append to the CHK key or None (may not contain slashes)
"""
return self.clientPut(
+ consts.RequestType.Put,
consts.KeyType.CHK,
- consts.RequestType.Put,
- userData,
- persistentUserData,
- None,
+
+ data=None,
+ persistentUserData=persistentUserData,
+ userData=userData,
+
# fcp params
Filename=filename,
ContentType=contentType,
@@ -2279,8 +2300,10 @@
'test123',
#persistence=c.Persistence.Reboot,
)
- for i in xrange(500):
- c.next()
+
+ c.run()
+ #for i in xrange(500):
+ # c.next()
#c.removeRequest(myIdentifier)
#for i in xrange(5):
# c.next()
@@ -2299,8 +2322,9 @@
)
- for i in xrange(500):
- c.next()
+ c.run()
+ #for i in xrange(500):
+ # c.next()
#c.removeRequest(identifier)
#for i in xrange(5):
# c.next()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|