def __init__(self, socket_addresses, wait_for_read_confirmation):
        self._socket_addresses = socket_addresses

        # Determines whether to wait for confirmation that the database
        # has been read before starting the simulation
        self._wait_for_read_confirmation = wait_for_read_confirmation
        self._wait_pool = ThreadPool(processes=1)
        self._data_base_message_connections = list()
        for socket_address in socket_addresses:
            self._data_base_message_connections.append(UDPEIEIOConnection(
                local_port=socket_address.listen_port,
                remote_host=socket_address.notify_host_name,
                remote_port=socket_address.notify_port_no))
    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)
import sys
import time

from spinnman.connections.udp_packet_connections.udp_eieio_connection \
    import UDPEIEIOConnection
from spinnman.messages.eieio.data_messages.eieio_data_message \
    import EIEIODataMessage
from spinnman.messages.eieio.data_messages.eieio_32bit.eieio_32bit_data_message\
    import EIEIO32BitDataMessage

if len(sys.argv) < 4:
    print "{} <machine-name> <port> <base-key>".format(sys.argv[0])
    sys.exit()

connection = UDPEIEIOConnection(remote_host=sys.argv[1],
                                remote_port=int(sys.argv[2]))

base_key = int(sys.argv[3])

keys_to_send = [[7], [6, 8], [0, 9], [], [0, 5, 9], [], [0, 4, 9], [1, 3], [2],
                [], [], [],
                range(0, 10), [], [5, 9], [], [5, 9], [], [5, 9], [6, 8], [7],
                [], [], [], [0, 9], [], [0, 9], [],
                range(0, 10), [], [0, 9], [], [0, 9], [], [], [],
                range(0, 10), [8], [7], [6], [5], [4], [3], [2], [1],
                range(0, 10), [], [], [],
                range(0, 10), [8], [7], [6], [5], [4], [3], [2], [1],
                range(0, 10), [], [], [], [0], [1], [2, 3], [4], [5, 6],
                [5, 7, 8], [5, 9], [5, 7,
                                    8], [5, 6], [4], [2, 3], [1], [0], [], [],
                [],