Esempio n. 1
0
	def sendResponse(self,orig_msg,resp_msg):
		with self.init_cond:
			if(self.initialized == False):
				self.init_cond.wait()

		with self.send_lock:
			resp = BotMessage.BotMessage(
				resp_msg.type,resp_msg.data,BotMessage.BotMessage.RESP,orig_msg.req_id)
			txt = BotMessage.toTxt(self.key,self.iv,self.send_seq,resp)
			self.send_seq += 1
			self.msg_input_q.put(txt)
Esempio n. 2
0
	def request(self,msg,timeout=None):

		start_time = time.time()

		req_id = self.send_seq
		req_msg = BotMessage.BotMessage(msg.type,msg.data,BotMessage.BotMessage.REQ,req_id)

		with self.init_cond:
			if(self.initialized == False):
				self.init_cond.wait()

		with self.send_lock:
			txt = BotMessage.toTxt(self.key,self.iv,self.send_seq,req_msg)
			self.send_seq += 1
			self.msg_input_q.put(txt)

		while(True):
			with self.msg_arrival_cond:
				if(self.msg_output_q.empty()):
					self.msg_arrival_cond.wait(timeout)
				
				with self.recv_lock:
					if(self.msg_output_q.empty() == False):

						msg = self.msg_output_q.get(False)
						obj = BotMessage.fromTxt(self.key,self.iv,self.recv_seq,msg)
						self.recv_seq += 1

						if(obj.req_type == BotMessage.BotMessage.RESP and obj.req_id == req_id):
							return obj
						else:
							self.request_buffer.put(obj,True,timeout)
					
					#Check the buffer for the desired message
					result = None
					tmp = []
					while(self.request_buffer.empty() == False):
						obj = self.request_buffer.get()
						if(obj.req_type == BotMessage.BotMessage.RESP and obj.req_id == req_id):
							result = obj
							break
						else:
							tmp.append(obj)

					for obj in tmp:
						self.request_buffer.put(obj,True)

					if(result == None and (time.time() - start_time) < timeout):
						continue

					return result
						
		"""