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. |