Пример #1
0
 def __init__(self, ip_address, logger):
     self.__msg_senders = dict()
     self.__msg_receivers = dict()
     self.__stopSockets = list()
     self.__address = ip_address
     self.__bots = self.get_bots()
     self.__logger = logger
     self.__inbox = Inbox(self.__logger)
     self.__started = False
     for bot in self.__bots:
         self.__logger.debug(ip_address + " added sender and receiver for: " + bot)
         self.__msg_senders[bot] = MessageSender(bot, self.PORT, self.__logger)
         self.__msg_receivers[bot] = MessageReceiver(bot, self.__inbox, self.__logger)
     self.__connection = ConnectionsListener(self.__address, self.PORT, self.__msg_receivers, self.__logger)
Пример #2
0
 def __init__(self, ip_address, logger):
     self.__msg_senders = dict()
     self.__msg_receivers = dict()
     self.__stopSockets = list()
     self.__address = ip_address
     self.__bots = self.get_bots()
     self.__logger = logger
     self.__inbox = Inbox(self.__logger)
     self.__started = False
     for bot in self.__bots:
         bot = bot.rstrip(
         )  ## remove '\n' -> should have been done by get_bots(), but appearantly this didnt work
         self.__logger.debug(ip_address +
                             " added sender and receiver for: " + bot)
         self.__msg_senders[bot] = MessageSender(bot, self.PORT,
                                                 self.__logger)
         self.__msg_receivers[bot] = MessageReceiver(
             bot, self.__inbox, self.__logger)
     self.__connection = ConnectionsListener(self.__address, self.PORT,
                                             self.__msg_receivers,
                                             self.__logger)
Пример #3
0
 def __init__(self, ip_address, logger):
     self.__msg_senders = dict()
     self.__msg_receivers = dict()
     self.__stopSockets = list()
     self.__address = ip_address
     self.__bots = self.get_bots()
     self.__logger = logger
     self.__inbox = Inbox(self.__logger)
     self.__started = False
     for bot in self.__bots:
         self.__logger.debug(ip_address + " added sender and receiver for: " + bot)
         self.__msg_senders[bot] = MessageSender(bot, self.PORT, self.__logger)
         self.__msg_receivers[bot] = MessageReceiver(bot, self.__inbox, self.__logger)
     self.__connection = ConnectionsListener(self.__address, self.PORT, self.__msg_receivers, self.__logger)
Пример #4
0
    def __init__(self, abilities, players):
        self.gm = players[0]
        self.errorAbility = ErrorAbility()
        self.eventQueue = PriorityQueue()
        self.parser = Parser()
        self.inbox = Inbox()
        self.outbox = Outbox()

        self.players = {}
        for player in players[1:]:
            self.players[player.getName().lower()] = player

        self.abilities = {}
        for ability in abilities:
            self.abilities[ability.getName().lower()] = ability
Пример #5
0
class Distributor:
    "Distributer class for distributed neat, only used if phys_dis_neat=True in class NEATPopulation"
    PORT = 4242

    def __init__(self, ip_address, logger):
        self.__msg_senders = dict()
        self.__msg_receivers = dict()
        self.__stopSockets = list()
        self.__address = ip_address
        self.__bots = self.get_bots()
        self.__logger = logger
        self.__inbox = Inbox(self.__logger)
        self.__started = False
        for bot in self.__bots:
            bot = bot.rstrip(
            )  ## remove '\n' -> should have been done by get_bots(), but appearantly this didnt work
            self.__logger.debug(ip_address +
                                " added sender and receiver for: " + bot)
            self.__msg_senders[bot] = MessageSender(bot, self.PORT,
                                                    self.__logger)
            self.__msg_receivers[bot] = MessageReceiver(
                bot, self.__inbox, self.__logger)
        self.__connection = ConnectionsListener(self.__address, self.PORT,
                                                self.__msg_receivers,
                                                self.__logger)

    def get_bots(self):
        with open('bots.txt') as bots_file:
            bots = bots_file.readlines()
        bots = filter(lambda b: b != "\n" and not b.startswith(self.__address),
                      bots)
        return [bot.replace("\n", "") for bot in bots]

    """
        Sends the Genotype to all robots listed in te bots.txt file. The function will return True when the sending was
        successful and False otherwise
    """

    def send_genotype(self, genotype):
        self.__logger.debug("Sending genotype to listeners: " + str(genotype))
        if self.__started:
            for addr in self.__msg_senders:
                bot = self.__msg_senders[addr]
                self.__logger.debug("Sending message to " + addr)
                bot.outboxAppend(genotype)
            return True
        else:
            self.__logger.debug(
                "Attempted to send genotype without starting the Distributor")
            return False

    def get_genotypes(self):
        genotypes = self.__inbox.popAll()
        self.__logger.info("Recieved " + str(len(genotypes)) + " genotypes")
        return genotypes

    """
        Start waiting for messages and enable the senders to send messages to the other bots
    """

    def start(self):
        self.__connection.start()

        for addr in self.__msg_senders:
            self.__msg_senders[addr].start()
        for addr in self.__msg_receivers:
            self.__msg_receivers[addr].start()
        self.__started = True

    def stop(self):
        if not self.__started:
            return

        for addr in self.__msg_senders:
            self.__logger.info('Killing Sender ' + addr)
            self.__msg_senders[addr].stop()
            self.__msg_senders[addr].join()
        self.__logger.info('All MessageSenders: KILLED')

        # Stopping connections listener: no more incoming connections
        self.__connection.stop()
        self.__connection.join()
        self.__logger.info('ConnectionsListener: KILLED')

        for addr in self.__msg_receivers:
            self.__logger.info("Killing receiver " + addr)
            self.__msg_receivers[addr].stop()
            self.__msg_receivers[addr].join()

        self.__logger.info("All MessageReceivers KILLED")
        self.__started = False
        self.__logger.close()
Пример #6
0
class Game:
    """ Defines a running instance of a Murder Mystery.
        Handles the initialization of the various game states.
    """
    def __init__(self, abilities, players):
        self.gm = players[0]
        self.errorAbility = ErrorAbility()
        self.eventQueue = PriorityQueue()
        self.parser = Parser()
        self.inbox = Inbox()
        self.outbox = Outbox()

        self.players = {}
        for player in players[1:]:
            self.players[player.getName().lower()] = player

        self.abilities = {}
        for ability in abilities:
            self.abilities[ability.getName().lower()] = ability

    def getGameMaster(self):
        return self.gm

    def addEvent(self, event):
        """ Schedules an event to be run.
        """
        self.eventQueue.put(event)

    def addEvents(self, events):
        """ Schedules a list of events to be run.
        """
        if(events):
            for event in events:
                self.eventQueue.put(event)

    def removeEvent(self, event):
        """ Removes a specific event from the priority queue
        """
        self.eventQueue.remove(event)

    def getOutbox(self):
        return self.outbox

    def isValidAbility(self, name):
        return name.lower() in self.abilities

    def getAbility(self, name):
        return self.abilities[name.lower()]

    def getAbilityNames(self):
        return self.abilities.keys()

    def isValidPlayer(self, name):
        return name.lower() in self.players

    def getPlayer(self, name):
        return self.players[name.lower()]

    def getPlayerNames(self):
        return self.players.keys()

    def removePlayer(self, name):
        if( self.isValidPlayer(name) ):
            del self.players[name.lower()]

    def run(self):
        """ Run the game, and Don't stop.
            Ever.
        """
        print "Starting the main loop!"
        while( True ):
            self.step()
            time.sleep(5)

    def step(self):
        """ Perform one step of the game logic.
            You need to call this repeatedly to make the game run.
        """
        #process incoming messages
        newMessages = self.inbox.poll()
        commands = self.parser.parse(self.abilities.values(), newMessages, self.errorAbility)
        for (sender,ability,args) in commands:
            print "Handling '"+ability.getName()+"' for '"+sender+"'"
            for player in self.players.values():
                if( player.getContact() == sender ):
                    print "\tRunning the ability!"
                    self.addEvents(ability.getEventsFor(self, player, args))
                    break

        #Process the queue of events
        while( not self.eventQueue.empty() ):
            event = self.eventQueue.get()
            if( event.when() < datetime.now() ):
                print "Performing an event"
                self.addEvents(event.perform(self))
            else:
                #Doesn't support peeking, so shove it back in the queue if it
                #shouldn't happen yet
                self.eventQueue.put(event)
                break
Пример #7
0
class Distributor:
    PORT = 4242

    def __init__(self, ip_address, logger):
        self.__msg_senders = dict()
        self.__msg_receivers = dict()
        self.__stopSockets = list()
        self.__address = ip_address
        self.__bots = self.get_bots()
        self.__logger = logger
        self.__inbox = Inbox(self.__logger)
        self.__started = False
        for bot in self.__bots:
            self.__logger.debug(ip_address + " added sender and receiver for: " + bot)
            self.__msg_senders[bot] = MessageSender(bot, self.PORT, self.__logger)
            self.__msg_receivers[bot] = MessageReceiver(bot, self.__inbox, self.__logger)
        self.__connection = ConnectionsListener(self.__address, self.PORT, self.__msg_receivers, self.__logger)

    def get_bots(self):
        with open('bots.txt') as bots_file:
            bots = bots_file.readlines()
        bots = filter(lambda b: b != "\n" and not b.startswith(self.__address), bots)
        return [bot.replace("\n", "") for bot in bots]

    """
        Sends the Genotype to all robots listed in te bots.txt file. The function will return True when the sending was
        successful and False otherwise
    """
    def send_genotype(self, genotype):
        self.__logger.debug("Sending genotype to listeners: " + str(genotype))
        if self.__started:
            for addr in self.__msg_senders:
                bot = self.__msg_senders[addr]
                self.__logger.debug("Sending message to " + addr)
                bot.outboxAppend(genotype)
            return True
        else:
            self.__logger.debug("Attempted to send genotype without starting the Distributor")
            return False

    def get_genotypes(self):
        genotypes = self.__inbox.popAll()
        self.__logger.info("Recieved " + str(len(genotypes)) +  " genotypes")
        return genotypes

    """
        Start waiting for messages and enable the senders to send messages to the other bots
    """
    def start(self):
        self.__connection.start()

        # for i in range(0, len(self.__msg_receivers)):
        #     stop_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #     stop_socket.connect(('127.0.0.1', '1337'))
        #     self.__stopSockets.append(stop_socket)

        for addr in self.__msg_senders:
            self.__msg_senders[addr].start()
        for addr in self.__msg_receivers:
            self.__msg_receivers[addr].start()
        self.__started = True

    def stop(self):
        if not self.__started:
            return

        for addr in self.__msg_senders:
            self.__logger.info('Killing Sender ' + addr)
            self.__msg_senders[addr].stop()
            self.__msg_senders[addr].join()
        self.__logger.info('All MessageSenders: KILLED')

        # Stopping connections listener: no more incoming connections
        self.__connection.stop()
        self.__connection.join()
        self.__logger.info('ConnectionsListener: KILLED')

        for addr in self.__msg_receivers:
            self.__logger.info("Killing receiver " + addr)
            self.__msg_receivers[addr].stop()
            self.__msg_receivers[addr].join()

        self.__logger.info("All MessageReceivers KILLED")
        self.__started = False
        self.__logger.close()
Пример #8
0
from Mail import Mail
from Inbox import Inbox
from PhyFinder import PhyFinder
import time
from TestMail import getMail

MyInbox = Inbox(["*****@*****.**"], [], "*****@*****.**")
MyInbox.calibrateThreshold()
#print("The threshold is: ", round(MyInbox.threshold, 2), "%")

for x in range(10):
    MyInbox.send(getMail(time.time())[0])

user_input = ""
while user_input != 'd':
    user_input = input("[i]nbox, [s]pam, [g]et mail, [d]one.")
    if user_input == 'i':
        MyInbox.printInbox()
    if user_input == 's':
        MyInbox.printSpam()
    if user_input == 'g':
        email_num = input("How many emails would you like to recieve? ")
        for x in range(int(email_num)):
            MyInbox.send(getMail(time.time())[0])
Пример #9
0
class Distributor:
    PORT = 4242

    def __init__(self, ip_address, logger):
        self.__msg_senders = dict()
        self.__msg_receivers = dict()
        self.__stopSockets = list()
        self.__address = ip_address
        self.__bots = self.get_bots()
        self.__logger = logger
        self.__inbox = Inbox(self.__logger)
        self.__started = False
        for bot in self.__bots:
            self.__logger.debug(ip_address + " added sender and receiver for: " + bot)
            self.__msg_senders[bot] = MessageSender(bot, self.PORT, self.__logger)
            self.__msg_receivers[bot] = MessageReceiver(bot, self.__inbox, self.__logger)
        self.__connection = ConnectionsListener(self.__address, self.PORT, self.__msg_receivers, self.__logger)

    def get_bots(self):
        with open('bots.txt') as bots_file:
            bots = bots_file.readlines()
        bots = filter(lambda b: b != "\n" and not b.startswith(self.__address), bots)
        return [bot.replace("\n", "") for bot in bots]

    """
        Sends the Genotype to all robots listed in te bots.txt file. The function will return True when the sending was
        successful and False otherwise
    """
    def send_genotype(self, genotype):
        self.__logger.debug("Sending genotype to listeners: " + str(genotype))
        if self.__started:
            for addr in self.__msg_senders:
                bot = self.__msg_senders[addr]
                self.__logger.debug("Sending message to " + addr)
                bot.outboxAppend(genotype)
            return True
        else:
            self.__logger.debug("Attempted to send genotype without starting the Distributor")
            return False

    def get_genotypes(self):
        genotypes = self.__inbox.popAll()
        self.__logger.info("Recieved " + str(len(genotypes)) +  " genotypes")
        return genotypes

    """
        Start waiting for messages and enable the senders to send messages to the other bots
    """
    def start(self):
        self.__connection.start()

        # for i in range(0, len(self.__msg_receivers)):
        #     stop_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #     stop_socket.connect(('127.0.0.1', '1337'))
        #     self.__stopSockets.append(stop_socket)

        for addr in self.__msg_senders:
            self.__msg_senders[addr].start()
        for addr in self.__msg_receivers:
            self.__msg_receivers[addr].start()
        self.__started = True

    def stop(self):
        if not self.__started:
            return

        for addr in self.__msg_senders:
            self.__logger.info('Killing Sender ' + addr)
            self.__msg_senders[addr].stop()
            self.__msg_senders[addr].join()
        self.__logger.info('All MessageSenders: KILLED')

        # Stopping connections listener: no more incoming connections
        self.__connection.stop()
        self.__connection.join()
        self.__logger.info('ConnectionsListener: KILLED')

        for addr in self.__msg_receivers:
            self.__logger.info("Killing receiver " + addr)
            self.__msg_receivers[addr].stop()
            self.__msg_receivers[addr].join()

        self.__logger.info("All MessageReceivers KILLED")
        self.__started = False
        self.__logger.close()