def select(self, read, write, have_expt, timeout): while 1: try: self.flush_queues() (s_read, s_write, s_expt) = select.select(read, write, have_expt, timeout) return s_read, s_write, s_expt except select.error, e: Debug.print_stacktrace() Logger.log('Vision Server: Currpupted socket, ' + 'trying to recover ...') for sock in self.descriptors_: try: # timeout 0 to remove delay select.select([sock], [], [], 0) except select.error, e: Debug.print_stacktrace() self.descriptors_.remove(sock) Logger.log('Socket deleted ...') if len(self.descriptors_) == 0: Logger.log('Vision Server: It was server socket, ' + ' restarting ...') self.srv_sock_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.descriptors_.append(slef.srv_sock_) self.start_server() break
def start_server(self): # bind to port at ip for i in range(V_SETT.STARTUP_ATTEMPTS)[1:]: try: print Logger.log('Vision Server: Start attempt [%d] ...' % i) self.srv_sock_.bind((self.ip_, self.port_)) # set maximum number of requests in the queue self.srv_sock_.listen(self.max_req_) self.alive_ = True break except: Debug.print_stacktrace() if i >= V_SETT.STARTUP_ATTEMPTS: break Logger.log('Vision Server: Could not bind to [%s, %d]' % ( self.ip_, self.port_)) Logger.log('Vision Server: Retrying in %d seconds' % ( V_SETT.STARTUP_ATTEMPT_TIMEOUT)) time.sleep(V_SETT.STARTUP_ATTEMPT_TIMEOUT) if not self.alive_: Logger.log('Vision Server: Could not connect to ' + '[%s, %d]' % (self.ip_, self.port_)) self.kill_processor() Logger.log('Vision Server: Started on [%s, %d]' % ( self.ip_, self.port_)) print 'To kill server, press with CTRL+C.'
def select(self, read, write, have_expt, timeout): while 1: try: self.flush_queues() (s_read, s_write, s_expt) = select.select(read, write, have_expt, timeout) return s_read, s_write, s_expt except select.error, e: Debug.print_stacktrace() Logger.log('Vision Server: Currpupted socket, ' + 'trying to recover ...') for sock in self.descriptors_: try: # timeout 0 to remove delay select.select([sock], [], [], 0) except select.error, e: Debug.print_stacktrace() self.descriptors_.remove(sock) Logger.log('Socket deleted ...') if len(self.descriptors_) == 0: Logger.log( 'Vision Server: It was server socket, ' + ' restarting ...') self.srv_sock_ = socket.socket( socket.AF_INET, socket.SOCK_STREAM) self.descriptors_.append(slef.srv_sock_) self.start_server() break
def start_server(self): # bind to port at ip for i in range(V_SETT.STARTUP_ATTEMPTS)[1:]: try: print Logger.log('Vision Server: Start attempt [%d] ...' % i) self.srv_sock_.bind((self.ip_, self.port_)) # set maximum number of requests in the queue self.srv_sock_.listen(self.max_req_) self.alive_ = True break except: Debug.print_stacktrace() if i >= V_SETT.STARTUP_ATTEMPTS: break Logger.log('Vision Server: Could not bind to [%s, %d]' % (self.ip_, self.port_)) Logger.log('Vision Server: Retrying in %d seconds' % (V_SETT.STARTUP_ATTEMPT_TIMEOUT)) time.sleep(V_SETT.STARTUP_ATTEMPT_TIMEOUT) if not self.alive_: Logger.log('Vision Server: Could not connect to ' + '[%s, %d]' % (self.ip_, self.port_)) self.kill_processor() Logger.log('Vision Server: Started on [%s, %d]' % (self.ip_, self.port_)) print 'To kill server, press with CTRL+C.'
def decode(msg): result = [] try: msg_type = CommProto.decode_chunk(msg[0:4]) # extract message type nr_args = CommProto.decode_chunk(msg[4:8]) # extract number of arugments result.extend([msg_type, nr_args]) # put them into the result offset = 8 for i in range(nr_args): beg = offset + i * 4 end = beg + 4 result.append(struct.unpack('!i', msg[beg:end])[0]) return result except: Debug.print_stacktrace() return None
def run(self): self.server_.start() # start up communication server self.perform_homography() VisionGUI.create_gui(self.red_color_, self.blu_color_, self.ylw_color_) # Initialise some value in the beginning prev_bal_center = (0, 0) prev_blu_center = (0, 0) prev_ylw_center = (0, 0) # should be safe, as during the first frame method should accurately # determine direction, if no direction can be determined, than # no object is present(or thresholding is broken), so doesn't matter prev_blu_dir = (0, -20) prev_ylw_dir = (0, -20) prev_time = time.time() frame_count = 0 one_sec = 0 while self.alive_: try: start = time.time() (prev_bal_center, prev_blu_center, prev_ylw_center, prev_blu_dir, prev_ylw_dir) = self.detect_objects( prev_bal_center, prev_blu_center, prev_ylw_center, prev_blu_dir, prev_ylw_dir) # update frame rate frame_count += 1 one_sec += time.time() - start if one_sec >= 1.0: self.fps_ = frame_count frame_count = 0 one_sec = one_sec % 1.0 except: Debug.print_stacktrace() self.kill_self() time.sleep(1) # wait for server to finish print Logger.log('Vision Processor: 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
def decode_chunk(msg): try: return struct.unpack('!i', msg)[0] except: Debug.print_stacktrace(sys.exc_info()) return None
def raise_exception(self, msg): Logger.log(msg) raise Exception(msg) Debug.print_stacktrace()