コード例 #1
0
ファイル: views.py プロジェクト: spencerwhyte/RSpeak
def retrieve_updates(request):
	"""
	Request handler to update client model after receiving a push notification
	1. Check queue to see if the client has any updates on standby
	2. Send the client their update
	3. Get ack from client
	4. Empty the queue
	"""
	if request.method == 'POST':
		json_data = json.loads(request.body)

		try:
			device_id = json_data['device_id']
		except KeyError:
			print "Error: A posted response did not have a JSON object with the required properties"
		else:

			# try sending the updates to the user
			# if this fails in any way (IOError) then make sure the updates
			# are back on the updates stack (else they won't reach the client).
			try:
				print device_id
				all_devices = Device.objects.all()
				device = all_devices.filter(device_id=device_id)[0]
				
				question_updates = QuestionUpdates.remove_updates(device)
				thread_updates = ThreadUpdates.remove_updates(device)
				response_updates = ResponseUpdates.remove_updates(device)
				serializer = Serializer()
				
				serialized_question_updates = serializer.serialize(question_updates)
				
				serialized_thread_updates = serializer.serialize(thread_updates)
				serialized_response_updates = serializer.serialize(response_updates)
				print serialized_question_updates
				
				
				all_updates = '{ "question_updates" : ' + serialized_question_updates + ', "thread_updates" : ' + serialized_thread_updates+ ', "response_updates" : ' + serialized_response_updates+ '}'
							
				return HttpResponse(all_updates, content_type="application/json")
			except IOError:
				# put back all updates into the update stack
				# This doesn't look like it would actually work
				for update in question_updates:
					QuestionUpdates.add_update(device, update)
					
				for update in thread_updates:
					ThreadUpdates.add_update(device, update)

				for update in response_updates:
					ResponseUpdates.add_update(device, update)

				print "Error: failed to send updates to client"
コード例 #2
0
ファイル: views.py プロジェクト: spencerwhyte/RSpeak
def respond(request):
	"""
	Request handler when someone posts a response
	1. Add response content to the database
	2. Send push notification to client device
	3. Update the credit of the responder
	"""
	if request.method == 'POST':
		json_data = json.loads(request.body)

		try:
			thread_id = json_data['thread_id']
			response_content = json_data['content']
			device_id = json_data['device_id']
		except KeyError:
			print "Error: A posted response did not have a JSON object with the required properties"
		else:
			# check that the thread id and the device ids are valid
			thread = Thread.objects.filter(id=thread_id)
			device = Device.objects.filter(device_id=device_id)

			print "Passed parameter validation"
			print thread.count()
			print device.count()

			if thread.exists() and device.exists():
				# add response to database
				response = Response(thread=thread[0], responder_device=device[0], response_content=response_content)
				response.save()

				# add update to the other device
				asker_device = thread[0].asker_device
				answerer_device = thread[0].answerer_device
				
				print "Thread and device actually exist"
				print device_id
				print asker_device.device_id
				print answerer_device.device_id

				if asker_device.device_id == device_id:
					ResponseUpdates.add_update(answerer_device, response)
					print "Adding an update to the answerers queue"
					
				elif answerer_device.device_id == device_id:
					ResponseUpdates.add_update(asker_device, response)
					print "Adding an update to the askers queue"

				return HttpResponse(json.dumps({}), content_type="application/json")