def _read_database_callback(self, database_reader): vertex_sizes = OrderedDict() run_time_ms = database_reader.get_configuration_parameter_value( "runtime") machine_timestep_ms = \ database_reader.get_configuration_parameter_value( "machine_time_step") / 1000.0 if self._send_labels is not None: self._sender_connection = UDPEIEIOConnection() for send_label in self._send_labels: ip_address, port = database_reader.get_live_input_details( send_label) self._send_address_details[send_label] = (ip_address, port) self._atom_id_to_key[send_label] = \ database_reader.get_atom_id_to_key_mapping(send_label) vertex_sizes[send_label] = len( self._atom_id_to_key[send_label]) if self._receive_labels is not None: receivers = dict() listeners = dict() label_id = 0 for receive_label in self._receive_labels: _, port, strip_sdp = database_reader.get_live_output_details( receive_label, self._live_packet_gather_label) if strip_sdp: if port not in receivers: receiver = UDPEIEIOConnection(local_port=port) listener = ConnectionListener(receiver) listener.add_callback(self._receive_packet_callback) listener.start() receivers[port] = receiver listeners[port] = listener else: raise Exception("Currently, only ip tags which strip the" " SDP headers are supported") key_to_atom_id = \ database_reader.get_key_to_atom_id_mapping(receive_label) for (key, atom_id) in key_to_atom_id.iteritems(): self._key_to_atom_id_and_label[key] = ( atom_id, label_id) label_id += 1 vertex_sizes[receive_label] = len(key_to_atom_id) for (label, vertex_size) in vertex_sizes.iteritems(): for init_callback in self._init_callbacks[label]: init_callback( label, vertex_size, run_time_ms, machine_timestep_ms)
def _read_database_callback(self, database_reader): self._handle_possible_rerun_state() vertex_sizes = OrderedDict() run_time_ms = database_reader.get_configuration_parameter_value( "runtime") machine_timestep_ms = \ database_reader.get_configuration_parameter_value( "machine_time_step") / 1000.0 if self._send_labels is not None: self._sender_connection = UDPEIEIOConnection() for send_label in self._send_labels: ip_address, port = None, None if self._partitioned_vertices: ip_address, port = \ database_reader.get_partitioned_live_input_details( send_label) else: ip_address, port = database_reader.get_live_input_details( send_label) self._send_address_details[send_label] = (ip_address, port) if self._partitioned_vertices: key, _ = database_reader.get_partitioned_live_input_key( send_label) self._atom_id_to_key[send_label] = {0: key} vertex_sizes[send_label] = 1 else: self._atom_id_to_key[send_label] = \ database_reader.get_atom_id_to_key_mapping(send_label) vertex_sizes[send_label] = len( self._atom_id_to_key[send_label]) if self._receive_labels is not None: label_id = 0 for receive_label in self._receive_labels: host, port, strip_sdp = None, None, None if self._partitioned_vertices: host, port, strip_sdp = \ database_reader.get_partitioned_live_output_details( receive_label, self._live_packet_gather_label) else: host, port, strip_sdp = \ database_reader.get_live_output_details( receive_label, self._live_packet_gather_label) if strip_sdp: if port not in self._receivers: receiver = UDPEIEIOConnection(local_port=port) listener = ConnectionListener(receiver) listener.add_callback(self._receive_packet_callback) listener.start() self._receivers[port] = receiver self._listeners[port] = listener logger.info( "Listening for traffic from {} on {}:{}".format( receive_label, host, port)) else: raise Exception("Currently, only ip tags which strip the" " SDP headers are supported") if self._partitioned_vertices: key, _ = database_reader.get_partitioned_live_output_key( receive_label, self._live_packet_gather_label) self._key_to_atom_id_and_label[key] = (0, label_id) vertex_sizes[receive_label] = 1 else: key_to_atom_id = \ database_reader.get_key_to_atom_id_mapping( receive_label) for (key, atom_id) in key_to_atom_id.iteritems(): self._key_to_atom_id_and_label[key] = (atom_id, label_id) vertex_sizes[receive_label] = len(key_to_atom_id) label_id += 1 for (label, vertex_size) in vertex_sizes.iteritems(): for init_callback in self._init_callbacks[label]: init_callback(label, vertex_size, run_time_ms, machine_timestep_ms)
print_condition = Condition() def receive_callback(packet): global pos_x global pos_y global dot global canvas try: count = struct.unpack_from("B", packet, 0)[0] for i in range(count): key = struct.unpack_from("<H", packet, 2 + (i * 2))[0] print_condition.acquire() direction = directions[key] print direction[0] canvas.delete(dot) pos_x += direction[1] pos_y += direction[2] dot = canvas.create_oval(pos_x - 5, pos_y - 5, pos_x + 5, pos_y + 5, fill="red") print_condition.release() except: traceback.print_exc() connection = ListenableUDPConnection(local_port=port) listener = ConnectionListener(connection) listener.add_callback(receive_callback) listener.start() tk.mainloop()
global pos_y global dot global canvas try: count = struct.unpack_from("B", packet, 0)[0] for i in range(count): key = struct.unpack_from("<H", packet, 2 + (i * 2))[0] & 0x3 print_condition.acquire() direction = directions[key] print direction[0] canvas.delete(dot) pos_x += direction[1] pos_y += direction[2] dot = canvas.create_oval(pos_x - 5, pos_y - 5, pos_x + 5, pos_y + 5, fill="red") print_condition.release() except: traceback.print_exc() connection = ListenableUDPConnection(local_port=port) listener = ConnectionListener(connection) listener.add_callback(receive_callback) listener.start() tk.mainloop()