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 __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 __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
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()
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
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()
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])