当前位置: 首页>>代码示例>>Python>>正文


Python Packet.json_RPC_object方法代码示例

本文整理汇总了Python中packet.Packet.json_RPC_object方法的典型用法代码示例。如果您正苦于以下问题:Python Packet.json_RPC_object方法的具体用法?Python Packet.json_RPC_object怎么用?Python Packet.json_RPC_object使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在packet.Packet的用法示例。


在下文中一共展示了Packet.json_RPC_object方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: transfer_file

# 需要导入模块: from packet import Packet [as 别名]
# 或者: from packet.Packet import json_RPC_object [as 别名]
	def transfer_file(self, share_ID, file_name, return_address, start_offset=0, end_offset=999999999999, block_skip=1):
		"""Sends a piece of a file to a peer in pieces.
		Initiated by JSONRPC: get_file()
		start_offset: start sending file from this offset
		end_offset: if this bytes is reached, send no more.
		block_skip: send a block, then skip this many blocks, then send the next etc.
		"""
		#continue to send all file blocks
		full_file_path = os.path.join(self.storage_directory, share_ID, file_name)
		f = open(full_file_path, 'rb')
		f.seek(start_offset)
		block_size = 5
		file_offset = start_offset
		
		logging.debug('file_name: %s start_offset: %d, end_offset: %d' %(file_name, start_offset, end_offset))
		
		while (file_offset < end_offset):  #@TODO: stop sending if given signal from return_address
			logging.debug('file_offset: %d' %(file_offset))
			block_bytes = f.read(64*block_size)
			if block_bytes == "":
				logging.debug('no bytes read from file')
				break
			p_out_block = Packet()
			p_out_block.json_RPC_object = dict(jsonrpc="2.0", method="save_file_block", params=[1.0, None, [self.my_machine_ID, share_ID, file_name, file_offset]], )  #id=rpc_id
			p_out_block.binary_blob = block_bytes
			p_out_block.to_address = return_address
			
			self.send_block_choke(p_out_block, return_address, 3)
			
			time.sleep(0.002)
			file_offset+=block_size
		
		logging.debug('finished file transfer')
		f.close()
开发者ID:stevenleigh,项目名称:sib,代码行数:36,代码来源:jsonserver.py

示例2: push_update_to_peer

# 需要导入模块: from packet import Packet [as 别名]
# 或者: from packet.Packet import json_RPC_object [as 别名]
	def push_update_to_peer(self, params, rpc_id, packet):
		'''
		Loop through all blobs in storage directory and poll peer to see if they have it.
		If the peer does not have the file, send it to them.
		If machine_ID is None then send updates to all machines with share.
		If current_commit is not None, then a sync_new_commit is sent to each peer
		'''
		[ver, congest, args] = params
		[share_ID, machine_ID, current_commit] = args
		logging.info('Pushing update for %s to %s and update to commit: %s' %(share_ID, machine_ID, current_commit))
		
		#Find all machines to push this update to
		to_transfer = dict()
		if machine_ID == None:
			logging.debug('dict: %s' %(self.share_machine_dict))
			if share_ID not in self.share_machine_dict:
				logging.error('No machines with this share')
				return
			logging.debug(self.share_machine_dict[share_ID])
			to_machines = self.share_machine_dict[share_ID]
		else:
			to_machines = [machine_ID]
		#delete my_machine_ID from to_machines
		if (self.my_machine_ID in to_machines):
			to_machines.remove(self.my_machine_ID)
		if len(to_machines)==0:
			logging.info('No other machines have this share.  Updates will not be pushed.')
			return
		logging.debug('Machines to push to: %s'%(to_machines))
		logging.debug('share path: %s' %(os.path.join(self.storage_directory, share_ID)))
		
		#send has_file query for all files.
		for root, dirs, files in os.walk(os.path.join(self.storage_directory, share_ID)):
			logging.debug('files: %s' %(files))
			for name in files:
				logging.debug('name: %s' %(name))
				for machine in to_machines:
					address = self.machine_address_dict[machine]
					rpc_id=random.randint(1,1000000) #TODO: rpc_id collisions could occur
					p = Packet()
					p.json_RPC_object = dict(jsonrpc="2.0", method="has_file", params=[1.0, None, [self.my_machine_ID, share_ID, name]], id=rpc_id)
					p.to_address = address
					self.send_block_choke(p, address, 3)
					to_transfer.update({rpc_id:[name, machine]})  #TODO: rpc_id collisions could occur
		
		logging.info('Sent has_file to %s with following RPC_IDs: %s' %(to_machines, to_transfer.keys()))
		time.sleep(3)  #wait for responses from peer
		
		logging.debug('json_response_dict: %s'%(self.json_response_dict))
		
		#send the file if the query comes back negative
		for item in to_transfer.items():
			[rpc_id, [name, machine]] = item
			if rpc_id not in self.json_response_dict:
				continue
			resp_packet = self.json_response_dict.pop(rpc_id)
			resp_value = resp_packet.json_RPC_object["result"]
			if not resp_value:
				#peer doesn't have this file, so send it
				self.transfer_file(share_ID, name, self.machine_address_dict[machine])
			del to_transfer[rpc_id]
		
		logging.info('No response for following files: %s' %(to_transfer.items()))
		
		if current_commit == None:
			return
		
		time.sleep(3)  #wait for responses from peer
		#Tell machines to update to current commit
		for machine in to_machines:
			address = self.machine_address_dict[machine]
			rpc_id=random.randint(1,1000000) #TODO: rpc_id collisions could occur
			p = Packet()
			p.json_RPC_object = dict(jsonrpc="2.0", method="sync_new_commit", params=[1.0, None, [current_commit, share_ID]], id=rpc_id)
			p.to_address = address
			self.send_block_choke(p, address, 3)
开发者ID:stevenleigh,项目名称:sib,代码行数:78,代码来源:jsonserver.py


注:本文中的packet.Packet.json_RPC_object方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。