SF.net SVN: fclient:[844] trunk/fclient/fclient/impl/lib/fcp2/client.py
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-08-01 23:49:42
|
Revision: 844
http://fclient.svn.sourceforge.net/fclient/?rev=844&view=rev
Author: jUrner
Date: 2008-08-01 23:49:50 +0000 (Fri, 01 Aug 2008)
Log Message:
-----------
all requests can be registered now (except from pluginMessage)
Modified Paths:
--------------
trunk/fclient/fclient/impl/lib/fcp2/client.py
Modified: trunk/fclient/fclient/impl/lib/fcp2/client.py
===================================================================
--- trunk/fclient/fclient/impl/lib/fcp2/client.py 2008-08-01 23:48:53 UTC (rev 843)
+++ trunk/fclient/fclient/impl/lib/fcp2/client.py 2008-08-01 23:49:50 UTC (rev 844)
@@ -381,6 +381,10 @@
@note: the client can only deal with requests registered here
@note: the identifier returned is unique to the client but may not be unique to the node
"""
+
+ if msg == message.MsgFCPPluginMessage:
+ raise ValueError('Can not register plugin messages')
+
identifier = self.newIdentifier(identifiers=self._requests) if identifier is None else identifier
# equip requests with some additional params
@@ -388,6 +392,7 @@
#TODO: keep an eye on additional params, they may collide with Fcp parameters
msg['Identifier'] = self.newIdentifier(identifiers=self._requests) if identifier is None else identifier
msg['InitTime'] = time.time() if initTime is None else initTime
+ msg['RequestStatus'] = consts.ConstRequestStatus.Null
if msg == message.MsgClientGet:
msg['HandleFilenameCollision'] = handleFilenameCollision
msg['HandlePermanentRedirect'] = handlePermanentRedirect
@@ -406,11 +411,7 @@
pass
elif msg == message.MsgSubscribeUSK:
msg['UserData'] = userData
- elif msg == message.MsgGetPluginInfo:
- pass
- else:
- raise ValueError('Can not register request: ' + msg.name)
-
+
self._requests[identifier] = msg
###############################################################
@@ -798,14 +799,20 @@
##
####################################################
elif msg == message.MsgConfigData:
- self.events.ConfigData(msg)
+ if initialRequest is None: #NOTE: just in case fcp supports global notifications some day
+ self.events.ConfigData(msg)
+ else:
+ self._finalizeRequest(msg, initialRequest, self.events.ConfigData)
return True
elif msg == message.MsgNodeData:
- self.events.NodeData(msg)
+ if initialRequest is None: #NOTE: just in case fcp supports global notifications some day
+ self.events.NodeData(msg)
+ else:
+ self._finalizeRequest(msg, initialRequest, self.events.NodeData)
return True
- ####################################################
+ ####################################################
##
## get / put related
##
@@ -844,7 +851,6 @@
)
else:
self._finalizeRequest(msg, initialRequest, self.events.RequestCompleted)
-
return True
@@ -1040,32 +1046,42 @@
##
####################################################
elif msg == message.MsgEndListPeers:
- self.events.EndListPeers(msg)
+ self._finalizeRequest(msg, initialRequest, self.events.EndListPeers)
return True
elif msg == message.MsgEndListPeerNotes:
- self.events.EndListPeerNotes(msg.params)
+ self._finalizeRequest(msg, initialRequest, self.events.EndListPeerNotes)
return True
elif msg == message.MsgPeer:
- self.events.Peer(msg)
+ if initialRequest is None: #NOTE: just in case fcp supports global notifications some day
+ self.events.Peer(msg)
+ else:
+ self._finalizeRequest(msg, initialRequest, self.events.Peer)
return True
elif msg == message.MsgPeerNote:
- self.events.PeerNote(msg)
+ if initialRequest is None: #NOTE: just in case fcp supports global notifications some day
+ self.events.PeerNote(msg)
+ else:
+ self._finalizeRequest(msg, initialRequest, self.events.PeerNote)
return True
elif msg == message.MsgPeerRemoved:
- self.events.PeerRemoved(msg)
+ if initialRequest is None: #NOTE: just in case fcp supports global notifications some day
+ self.events.PeerRemoved(msg)
+ else:
+ self._finalizeRequest(msg, initialRequest, self.events.PeerRemoved)
return True
elif msg == message.MsgUnknownNodeIdentifier:
- self.events.PeerUnknown(msg)
+ self._finalizeRequest(msg, initialRequest, self.events.PeerUnknown)
return True
elif msg == message.MsgUnknownPeerNoteType:
- self.events.PeerNoteTypeUnknown(msg)
+ self._finalizeRequest(msg, initialRequest, self.events.NoteTypeUnknown)
return True
+
####################################################
##
## plugins
@@ -1112,6 +1128,7 @@
self._finalizeRequest(msg, initialRequest, self.events.KeypairGenerated)
return True
+ #NOTE: can not be removed. so don't finalize
elif msg == message.MsgSubscribedUSKUpdate:
if initialRequest is None:
return False
@@ -2012,6 +2029,28 @@
else:
del self._requests[request['Identifier']]
+
+ def resendRequest(self, request):
+
+ if request == message.MsgFCPPluginMessage:
+ # we can not register plugin messages, cause we don't know if we get a reply
+ pass
+ else:
+ if request['Identifier'] in self._requests:
+ self.removeRequest(request)
+ self.registerRequest(
+ request,
+ userData=request['UserData'],
+ identifier=None,
+ initTime=None,
+ persistentUserData=request['PersistentUserData'],
+ handleFilenameCollision=request.get('HandleFilenameCollision', False),
+ handlePermanentRedirect=request.get('HandleFilenameCollision', False),
+ )
+ self.sendMessage(request)
+ return request
+
+
########################################################
##
## Peer related methods
@@ -2027,24 +2066,24 @@
@param withVolatile: if True, statistical data is included
@param giveOpennetRef: if True, the opennet reference is retuned instead of the darknet
"""
- self.sendMessage(
- message.MsgGetNode(
+ msg = message.MsgGetNode(
WithPrivate=withPrivate,
WithVolatile=withVolatile,
GiveOpennetRef=giveOpennetRef,
)
- )
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
def listPeer(self, identity):
"""Requests information about a peer node
@param identity: identity of the peer to request information for
"""
- self.sendMessage(
- message.MsgListPeer(
- NodeIdentifier=identity,
- )
- )
+ msg = message.MsgListPeer(NodeIdentifier=identity)
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
def listPeerNotes(self, identity):
@@ -2054,11 +2093,10 @@
@event: EndListPeerNotes(event, params)
@note: listPeerNotes() is only available for darknet nodes
"""
- self.sendMessage(
- message.MsgListPeerNotes(
- NodeIdentifier=identity
- )
- )
+ msg = message.MsgListPeerNotes(NodeIdentifier=identity)
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
def listPeers(self, withMetaData=True, withVolantile=True):
@@ -2069,12 +2107,13 @@
@event: Peer(event, peer).
@event: EndListPeers(event, params).
"""
- self.sendMessage(
- message.MsgListPeers(
+ msg = message.MsgListPeers(
WithMetadata=withMetaData,
WithVolatile=withVolantile,
)
- )
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
def modifyPeer(self, identitty, allowLocalAddresses=None, isDisabled=None, isListenOnly=None):
@@ -2086,18 +2125,16 @@
@note: you can only modify darknet peers
"""
- msg = MessageEx(
- message.MsgModifyPeer(
- NodeIdentifier=identity,
- )
- )
+ msg = message.MsgModifyPeer(NodeIdentifier=identity)
if allowLocalAddresses is not None:
msg['AllowLocalAddresses'] = allowLocalAddresses
if isDisabled is not None:
msg['IsDisabled'] = isDisabled
if isListenOnly is not None:
msg['IsListenOnly'] = isListenOnly
+ self.registerRequest(msg)
self.sendMessage(msg)
+ return msg
def modifyPeerNote(self, identity, note):
@@ -2107,25 +2144,25 @@
@note: you can only modify notes of darknet peers
"""
- self.sendMessage(
- message.MsgModifyPeerNote(
+ msg = message.MsgModifyPeerNote(
NodeIdentifier=identity,
#NOTE: currently fcp supports only this one type
PeerNoteType=consts.ConstPeerNoteType.Private,
NoteText=note
)
- )
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
def removePeer(self, identity):
"""Removes a peer
@param identity: identity of the peer node to remove
"""
- self.sendMessage(
- message.MsgRemovePeer(
- NodeIdentifier=identity,
- )
- )
+ msg = message.MsgRemovePeer(NodeIdentifier=identity)
+ self.registerRequest(msg)
+ self.sendMessage(msg)
+ return msg
##########################################################
##
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|