Example #1
0
	def send(self, data):

		header = Header()
		header.size = len(data)
		header.sequence_number = self.send_sequence

		data = header.to_bytes() + data

		while True:
			#TODO: this could be done more elegantly
			if(len(self.workers) == 0):
				Log.log("Shutdown multiplexer. No workers found")
				self.cleanup()
				sys.exit(0)

			worker = self.workers[self.send_index][0]

			#Increment the sequence number and the send_index to send along another worker
			self.send_index = (1 + self.send_index) % len(self.workers)

			try:

				worker.write(data)
				worker.flush()

				break
			except IOError as e:
				if e.errno == 11:
					#TODO: whut. Why did I do this?
					pass
				else:
					raise e

		self.send_sequence = self.send_sequence + 1
Example #2
0
def test_worker():
	LEFT_WORKER_WRITE = "test_write.fifo"
	LEFT_WORKER_READ = "test_read.fifo"

	try:
		os.mkfifo(LEFT_WORKER_READ)
	except FileExistsError:
		pass
	try:
		os.mkfifo(LEFT_WORKER_WRITE)
	except FileExistsError:
		pass



	pid = os.fork()
	if pid == 0:
		left_read = open(LEFT_WORKER_READ, "rb")
		left_write = open(LEFT_WORKER_WRITE, "wb")
		
		left_worker = worker.Worker(1, left_read, left_write)
		
		left_worker.poll()
	else:
		pid = os.fork()
		if pid == 0:
			right_write = open(LEFT_WORKER_READ, "wb")
			right_read = open(LEFT_WORKER_WRITE, "rb")

			right_worker = worker.Worker(2, right_read, right_write)
			
			right_worker.poll()
		else:
				#these will be fifos..
			left_multi_write = worker.Worker.get_read_path(str(1))
			left_multi_read = worker.Worker.get_write_path(str(1))

			try:
				os.mkfifo(left_multi_write)
			except FileExistsError:
				pass

			try:
				os.mkfifo(left_multi_read)
			except FileExistsError:
				pass

			right_multi_write = worker.Worker.get_read_path(str(2))
			right_multi_read = worker.Worker.get_write_path(str(2))


			try:
				os.mkfifo(right_multi_write)
			except FileExistsError:
				pass

			try:
				os.mkfifo(right_multi_read)
			except FileExistsError:
				pass


			left_multi_read = open(left_multi_read, "rb")
			left_multi_write = open(left_multi_write, "wb")
			right_multi_read = open(right_multi_read, "rb")
			right_multi_write = open(right_multi_write, "wb")

			# left_multi_read = left_multi_read.buffer
			# left_multi_write = left_multi_write.buffer
			# right_multi_read = right_multi_read.buffer
			# right_multi_write = right_multi_write.buffer
			
			to_send = bytes("helloworld\n", 'UTF-8')


			header = Header()
			header.sequence_number = 1
			header.size = len(to_send)



			left_multi_write.write(b''.join([header.to_bytes(), to_send]))
			left_multi_write.flush()

			assert(right_multi_read.readline() == header.to_bytes())
			assert(right_multi_read.readline() == to_send)

			right_multi_write.write(b''.join([header.to_bytes(), to_send]))
			right_multi_write.flush()

			assert(left_multi_read.readline() == header.to_bytes())
			assert(left_multi_read.readline() == to_send)
			
			os.unlink(LEFT_WORKER_WRITE)
	

			os.unlink(LEFT_WORKER_READ)