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 ...")
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 ...")
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
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
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()
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()