예제 #1
0
	def run(self):
		self.start_server()

		while self.alive_:
			# get_read_ready_socks will block until a socket is ready for
			# reading or return an empty list when the of timeout 1 sec ends.
			for sock in self.get_read_ready_socks(self.descriptors_, 1):
				if sock == self.srv_sock_:	# if server socket has information
					self.accept_new_connection()
				else:	# get data from peer
					size = 10000
					data = b''
					length = 0
					chunk = CHUNK = 4 # bites
					host, port = self.peers_[self.descriptors_.index(sock)]
					while length < size:
						try:
							data_chunk = sock.recv(chunk)
						except:
							break
						if not data_chunk:	# if empty message
							Logger.log("Vision Server: [%s,%d]" % (
								host, port) + ' closed connection ...')
							sock.close()
							# remove sock from all lists
							self.remove_sock(sock)
							break
						data += data_chunk
						length += len(data_chunk)
						chunk = CHUNK - (length % CHUNK)
						if length == 8:
							size = CommProto.decode_chunk(data[4:8])
					if not data_chunk: continue # if las message was empty
					reply = CommProto.decode(data)
					Logger.log('VisionServer: [%s, %d] sent: %s' % (
						host, port, str(reply)))
					self.react_and_reply(sock, host, port, reply)


		# this is executed when thread is dying
		for sock in self.descriptors_:
			sock.close()
		Logger.log("Vision Server: Exiting ...")
예제 #2
0
    def run(self):
        self.start_server()

        while self.alive_:
            # get_read_ready_socks will block until a socket is ready for
            # reading or return an empty list when the of timeout 1 sec ends.
            for sock in self.get_read_ready_socks(self.descriptors_, 1):
                if sock == self.srv_sock_:  # if server socket has information
                    self.accept_new_connection()
                else:  # get data from peer
                    size = 10000
                    data = b''
                    length = 0
                    chunk = CHUNK = 4  # bites
                    host, port = self.peers_[self.descriptors_.index(sock)]
                    while length < size:
                        try:
                            data_chunk = sock.recv(chunk)
                        except:
                            break
                        if not data_chunk:  # if empty message
                            Logger.log("Vision Server: [%s,%d]" %
                                       (host, port) + ' closed connection ...')
                            sock.close()
                            # remove sock from all lists
                            self.remove_sock(sock)
                            break
                        data += data_chunk
                        length += len(data_chunk)
                        chunk = CHUNK - (length % CHUNK)
                        if length == 8:
                            size = CommProto.decode_chunk(data[4:8])
                    if not data_chunk: continue  # if las message was empty
                    reply = CommProto.decode(data)
                    Logger.log('VisionServer: [%s, %d] sent: %s' %
                               (host, port, str(reply)))
                    self.react_and_reply(sock, host, port, reply)

        # this is executed when thread is dying
        for sock in self.descriptors_:
            sock.close()
        Logger.log("Vision Server: Exiting ...")
예제 #3
0
	def send_data(self, sock, msg, mode = CommProto.MODE_ONCE, peer = None):
		with self.lock_:
			try:
				sock.send(CommProto.encode(msg))
				return True
			except:	# connection died, enqueue message if mode = MODE_SAFE
				Debug.print_stacktrace()
				enqueued = ''
				if mode == CommProto.MODE_SAFE:
					if not peer: return False
					print 'SEND FAILED, ENQUEUEING ...'
					if peer[0] in self.outgoing_q_:			# if in queue
						# append to queue
						self.outgoing_q_[peer[0]].append((msg, time.time()))
					else:
						# or create queue
						self.outgoing_q_[peer[0]] = [(msg, time.time())]
					enqueued = ', but saved in queue '
				self.remove_sock(sock)
				Logger.log('Socket died. Messag not sent%s...' % enqueued)
				return False
예제 #4
0
 def send_data(self, sock, msg, mode=CommProto.MODE_ONCE, peer=None):
     with self.lock_:
         try:
             sock.send(CommProto.encode(msg))
             return True
         except:  # connection died, enqueue message if mode = MODE_SAFE
             Debug.print_stacktrace()
             enqueued = ''
             if mode == CommProto.MODE_SAFE:
                 if not peer: return False
                 print 'SEND FAILED, ENQUEUEING ...'
                 if peer[0] in self.outgoing_q_:  # if in queue
                     # append to queue
                     self.outgoing_q_[peer[0]].append((msg, time.time()))
                 else:
                     # or create queue
                     self.outgoing_q_[peer[0]] = [(msg, time.time())]
                 enqueued = ', but saved in queue '
             self.remove_sock(sock)
             Logger.log('Socket died. Messag not sent%s...' % enqueued)
             return False
예제 #5
0
n = n or 1 # set number of requests to 1 if n not provided

if not (port and ip):
	# get port
	port = port or V_SETT.VISION_SRV_PORT
	ip = ip or ''	# '' is localhost

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

print "testclient: Connecting to [%s, %d] ..." % (ip, port)
sock.connect((ip, port))

if CommProto.CTR_PITCH in request:
	print 'ASKING PITCH'
	for i in range(n):
		sock.send(CommProto.encode([CommProto.CTR_PITCH, 0]))
		reply = recv(sock, COMMPROTO_MAX_MSG_SIZE)
		print "[%s, %d] Receiving: P[%d]" % (ip, port, i), reply

if CommProto.STATE in request:
	print 'Start streaming ...'
	# start stream
	sock.send(CommProto.encode([CommProto.CTR_STATE, 0]))
	i = 0
	for i in range(n):
		reply = recv(sock, COMMPROTO_MAX_MSG_SIZE)
		print "[%s, %d] Receiving: S " % (ip, port), reply
	# stop stream
	print 'Stopping stream ...'
	sock.send(CommProto.encode([CommProto.CTR_STOP_STATE, 0]))
	wait_ackn()
예제 #6
0
n = n or 1  # set number of requests to 1 if n not provided

if not (port and ip):
    # get port
    port = port or V_SETT.VISION_SRV_PORT
    ip = ip or ""  # '' is localhost

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print "testclient: Connecting to [%s, %d] ..." % (ip, port)
sock.connect((ip, port))

if CommProto.CTR_PITCH in request:
    print "ASKING PITCH"
    for i in range(n):
        sock.send(CommProto.encode([CommProto.CTR_PITCH, 0]))
        reply = recv(sock, COMMPROTO_MAX_MSG_SIZE)
        print "[%s, %d] Receiving: P[%d]" % (ip, port, i), reply

if CommProto.STATE in request:
    print "Start streaming ..."
    # start stream
    sock.send(CommProto.encode([CommProto.CTR_STATE, 0]))
    i = 0
    for i in range(n):
        reply = recv(sock, COMMPROTO_MAX_MSG_SIZE)
        print "[%s, %d] Receiving: S " % (ip, port), reply
        # stop stream
    print "Stopping stream ..."
    sock.send(CommProto.encode([CommProto.CTR_STOP_STATE, 0]))
    wait_ackn()