示例#1
0
 def handle(self):
     """
         This function handles any inputs to our tx socket
     """
     sock = self.request
     
     logger.debug("Handler got message, forwarding to scheduler...")
     
     # Receive our header
     msg = NodeMessage()
     header = sock.recv(len(msg))
     
     # Receive our data
     msg._unpack(header)
     if msg.length > 0:
         msg.data = sock.recv(msg.length)
     
     # Forward data along to our scheduler
     TX_QUEUE.put(msg)
示例#2
0
    def handle(self):
        """
            This function handles any inputs to our tx socket
        """
        sock = self.request

        logger.debug("Handler got message, forwarding to scheduler...")

        # Receive our header
        msg = NodeMessage()
        header = sock.recv(len(msg))

        # Receive our data
        msg._unpack(header)
        if msg.length > 0:
            msg.data = sock.recv(msg.length)

        # Forward data along to our scheduler
        TX_QUEUE.put(msg)
示例#3
0
    def send(self, message_type, data="", destination=G.MESSAGE_BROADCAST_ADDRESS):
        """
            Craft a Node message and send it over our local UNIX socket
        """
        # Define a node message
        msg = NodeMessage()

        msg.source = 0  # Set by lower-level protocol
        msg.my_node_id = 0  # Set by lower-level protocol
        msg.path = 0  # Will be populated by our underlying
        # routing algorithm
        msg.visited = 0  # Always starts at 0
        # Must fill these in
        msg.type = message_type
        msg.data = data
        msg.destination = destination
        msg.frag_id = 0
        msg.frag_num = 1

        # Set the Length
        msg.length = len(msg.data)

        return self._send(msg)
示例#4
0
 def send(self, message_type, data="", destination=G.MESSAGE_BROADCAST_ADDRESS):
     """
         Craft a Node message and send it over our local UNIX socket
     """
     # Define a node message
     msg = NodeMessage()
     
     msg.source = 0                  # Set by lower-level protocol
     msg.my_node_id = 0              # Set by lower-level protocol
     msg.path = 0                    # Will be populated by our underlying
                                     # routing algorithm
     msg.visited = 0                 # Always starts at 0
     # Must fill these in
     msg.type = message_type
     msg.data = data
     msg.destination = destination
     msg.frag_id = 0
     msg.frag_num = 1
     
     # Set the Length
     msg.length = len(msg.data)
     
     return self._send(msg)
示例#5
0
    def handle(self):
        """
            This function handles any inputs to our tx socket
        """
        sock = self.request

        logger.debug("Database handler got message, processing...")

        # Receive our header
        node_message = NodeMessage()
        header = sock.recv(len(node_message))

        # Receive our data
        node_message._unpack(header)
        if node_message.length > 0:
            node_message.data = sock.recv(node_message.length)

        # Grab our mutex to ensure only 1 write at time.
        with db_mutex:
            if node_message.type == G.MESSAGE_TYPE.DB_GPS:
                update_fn = DatabaseServer.DB.update_gps
            elif node_message.type == G.MESSAGE_TYPE.DB_PERSON:
                update_fn = DatabaseServer.DB.update_person
            elif node_message.type == G.MESSAGE_TYPE.DB_SERVICE:
                update_fn = DatabaseServer.DB.update_service
            else:
                logger.error("Got unrecognized DB packet. (Type: %d)" %
                             node_message.type)
                return False

            rtn_data = update_fn(node_message)
            if rtn_data is not False:
                logger.debug("Successfully updated db.")
                sock.sendall( ` rtn_data `)
            else:
                logger.debug("Db update failed.")
                sock.sendall("0")
示例#6
0
    def handle(self):
        """
            This function handles any inputs to our tx socket
        """
        sock = self.request

        logger.debug("Database handler got message, processing...")
        
        # Receive our header
        node_message = NodeMessage()
        header = sock.recv(len(node_message))
        
        # Receive our data
        node_message._unpack(header)
        if node_message.length > 0:
            node_message.data = sock.recv(node_message.length)

        # Grab our mutex to ensure only 1 write at time.
        with db_mutex:
            if node_message.type == G.MESSAGE_TYPE.DB_GPS:
                update_fn = DatabaseServer.DB.update_gps
            elif node_message.type == G.MESSAGE_TYPE.DB_PERSON:
                update_fn = DatabaseServer.DB.update_person
            elif node_message.type == G.MESSAGE_TYPE.DB_SERVICE:
                update_fn = DatabaseServer.DB.update_service
            else:
                logger.error("Got unrecognized DB packet. (Type: %d)"%
                             node_message.type)
                return False
            
            rtn_data = update_fn(node_message)
            if rtn_data is not False:
                logger.debug("Successfully updated db.")
                sock.sendall(`rtn_data`)
            else:
                logger.debug("Db update failed.")
                sock.sendall("0")
示例#7
0
def gen_people(n, db, start_lat, stop_lat, start_long, stop_long):
    """
    Generates n people, random male/female ratio between 5 and 90 years of age
    """
    assert n > 0

    # open male first names file
    f = open("dist.male.first", "r")
    male_first_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # open female first names file
    f = open("dist.female.first", "r")
    female_first_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # open last names file
    f = open("dist.all.last", "r")
    family_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # generate people
    for i in range(n):

        catanDBObj = catan.db.CatanDatabaseObject()

        # bio
        sex = random.randint(0, 1)
        if sex == 0:  # male
            catanDBObj.person_bio.name_given = male_first_names[random.randint(0, len(male_first_names) - 1)]
            catanDBObj.person_bio.sex = "male"
        else:  # female
            catanDBObj.person_bio.name_given = female_first_names[random.randint(0, len(female_first_names) - 1)]
            catanDBObj.person_bio.sex = "female"

        catanDBObj.person_bio.name_family = family_names[random.randint(0, len(family_names) - 1)]
        catanDBObj.person_bio.age = random.randint(5, 90)

        # message (message, status, location, etc.)

        # location
        lat = round(random.uniform(start_lat, stop_lat), 6)
        lng = round(random.uniform(start_long, stop_long), 6)

        catanDBObj.person_message.person_message = "Hi Mom"

        catanDBObj.person_message.status_gps_latitude = lat
        catanDBObj.person_message.status_gps_longitude = lng
        catanDBObj.person_message.status_gps_accuracy = 0

        # status
        catanDBObj.person_message.status = STATUS_LIST[random.randint(0, len(STATUS_LIST) - 1)]
        catanDBObj.person_message.status_location = "Test status location"

        # generate a NodeMessage for the database
        # it only cares about the data and source fields, so we can ignore other fields
        nmsg = NodeMessage()
        nmsg.source = random.randint(0, 31)  # random node 0-31
        nmsg.data = catanDBObj.pack()

        db.update_db(nmsg)

    # Create some random updates
    for i in range(1, n + 1):
        update = random.randint(0, 1)
        if update == 0:

            catanDBObj = catan.db.CatanDatabaseObject()
            catanDBObj.person_id = i

            # location
            lat = round(random.uniform(start_lat, stop_lat), 6)
            lng = round(random.uniform(start_long, stop_long), 6)

            catanDBObj.person_message.person_message = "Location update 1"

            catanDBObj.person_message.status_gps_latitude = lat
            catanDBObj.person_message.status_gps_longitude = lng
            catanDBObj.person_message.status_gps_accuracy = 0

            n = NodeMessage()
            n.source = random.randint(0, 31)
            n.data = catanDBObj.pack()

            db.update_db(n)
示例#8
0
def gen_people(n, db, start_lat, stop_lat, start_long, stop_long):
    """
    Generates n people, random male/female ratio between 5 and 90 years of age
    """
    assert n > 0

    # open male first names file
    f = open('dist.male.first', 'r')
    male_first_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # open female first names file
    f = open('dist.female.first', 'r')
    female_first_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # open last names file
    f = open('dist.all.last', 'r')
    family_names = [name.strip().split()[0] for name in f.readlines()]
    f.close()

    # generate people
    for i in range(n):

        catanDBObj = catan.db.CatanDatabaseObject()

        # bio
        sex = random.randint(0, 1)
        if sex == 0:  # male
            catanDBObj.person_bio.name_given = male_first_names[random.randint(
                0,
                len(male_first_names) - 1)]
            catanDBObj.person_bio.sex = 'male'
        else:  # female
            catanDBObj.person_bio.name_given = female_first_names[
                random.randint(0,
                               len(female_first_names) - 1)]
            catanDBObj.person_bio.sex = 'female'

        catanDBObj.person_bio.name_family = family_names[random.randint(
            0,
            len(family_names) - 1)]
        catanDBObj.person_bio.age = random.randint(5, 90)

        # message (message, status, location, etc.)

        # location
        lat = round(random.uniform(start_lat, stop_lat), 6)
        lng = round(random.uniform(start_long, stop_long), 6)

        catanDBObj.person_message.person_message = 'Hi Mom'

        catanDBObj.person_message.status_gps_latitude = lat
        catanDBObj.person_message.status_gps_longitude = lng
        catanDBObj.person_message.status_gps_accuracy = 0

        # status
        catanDBObj.person_message.status = STATUS_LIST[random.randint(
            0,
            len(STATUS_LIST) - 1)]
        catanDBObj.person_message.status_location = 'Test status location'

        # generate a NodeMessage for the database
        # it only cares about the data and source fields, so we can ignore other fields
        nmsg = NodeMessage()
        nmsg.source = random.randint(0, 31)  # random node 0-31
        nmsg.data = catanDBObj.pack()

        db.update_db(nmsg)

    # Create some random updates
    for i in range(1, n + 1):
        update = random.randint(0, 1)
        if update == 0:

            catanDBObj = catan.db.CatanDatabaseObject()
            catanDBObj.person_id = i

            # location
            lat = round(random.uniform(start_lat, stop_lat), 6)
            lng = round(random.uniform(start_long, stop_long), 6)

            catanDBObj.person_message.person_message = 'Location update 1'

            catanDBObj.person_message.status_gps_latitude = lat
            catanDBObj.person_message.status_gps_longitude = lng
            catanDBObj.person_message.status_gps_accuracy = 0

            n = NodeMessage()
            n.source = random.randint(0, 31)
            n.data = catanDBObj.pack()

            db.update_db(n)