예제 #1
0
class BizLogic(object):

    def __init__(self, args):
        self.host = args.host
        self.port = args.port
        self.tether = Tether(None, "//%s/bizlogic" % self.host, None,
                             host=self.host, port=self.port,
                             agent_type="bizlogic", policy="ordered")

        self.users = {}
        self.user_reread_period = 30  # seconds
        self.linker = Linker()
        self.container = Container(Processor(self))
        self.container[self.tether.agent] = Agent(self.tether)

    def on_reactor_init(self, event):
        event.reactor.acceptor(self.host, self.port, self.container)
        self.tether.start(event.reactor)
        event.reactor.schedule(0, self)
        self.linker.start(event.reactor)

    def on_timer_task(self, event):
        self.users = common.load_data("users.pickle")
        event.reactor.schedule(self.user_reread_period, self)

    def on_message(self, event):
        bark = common.Bark(*event.message.body)
        words = bark.content.split()
        mentions = [word[1:] for word in words if word.startswith("@")]
        user = self.users[bark.user]
        followers = user.getFollowers(self.users)
        targets = set(mentions + followers + [bark.user])
        for target in targets:
            sender = self.linker.sender("//%s/inbox/%s" % (self.host, target))
            sender.send(event.message.body)
예제 #2
0
    def __init__(self, args):
        self.host = args.host
        self.port = args.port
        self.tether = Tether(None, "//%s/bizlogic" % self.host, None,
                             host=self.host, port=self.port,
                             agent_type="bizlogic", policy="ordered")

        self.users = {}
        self.user_reread_period = 30  # seconds
        self.linker = Linker()
        self.container = Container(Processor(self))
        self.container[self.tether.agent] = Agent(self.tether)
예제 #3
0
class AutoBark(object):
    def __init__(self, rate, hostname):
        self.users = {}
        try:
            self.quotes = open("quotes.txt").read().split("\n")
        except IOError:
            self.quotes = [
                """"On the Internet, everybody knows you're a dog." --Oscar Wilde"""
            ]
        self.last_user_reread = 0
        self.user_reread_period = 30  # seconds
        self.bark_period = 1.0 / rate  # seconds
        self.linker = Linker()
        self.hostname = hostname

    def make_random_bark(self):
        while True:
            username = random.choice(self.users.keys())
            user = self.users[username]
            if user.autobark:
                break
        if random.random() > 0.9:
            messageText = random.choice(self.quotes)
        else:
            words = [
                random.choice(["woof", "arf", "ruff", "yap"])
                for idx in range(random.randint(3, 8))
            ]
            if random.random() > 0.75:
                words.append(
                    "@" + random.choice(user.follows))  # one can always dream
            if random.random() > 0.9:
                words.append("#subwoofer")
            messageText = " ".join(words)
        return common.Bark(username, messageText)

    def on_reactor_init(self, event):
        event.reactor.schedule(0, self)
        self.linker.start(event.reactor)

    def on_timer_task(self, event):
        now = time.time()
        if now - self.last_user_reread > self.user_reread_period:
            self.users = common.load_data("users.pickle")
            self.last_user_reread = now

        bark = self.make_random_bark()
        sender = self.linker.sender("//%s/outbox/%s" %
                                    (self.hostname, bark.user))
        sender.send(tuple(bark))

        event.reactor.schedule(self.bark_period, self)
예제 #4
0
 def __init__(self, rate, hostname):
     self.users = {}
     try:
         self.quotes = open("quotes.txt").read().split("\n")
     except IOError:
         self.quotes = [
             """"On the Internet, everybody knows you're a dog." --Oscar Wilde"""
         ]
     self.last_user_reread = 0
     self.user_reread_period = 30  # seconds
     self.bark_period = 1.0 / rate  # seconds
     self.linker = Linker()
     self.hostname = hostname
예제 #5
0
class AutoBark(object):

    def __init__(self, rate, hostname):
        self.users = {}
        try:
            self.quotes = open("quotes.txt").read().split("\n")
        except IOError:
            self.quotes = [
            """"On the Internet, everybody knows you're a dog." --Oscar Wilde"""
            ]
        self.last_user_reread = 0
        self.user_reread_period = 30  # seconds
        self.bark_period = 1.0 / rate  # seconds
        self.linker = Linker()
        self.hostname = hostname

    def make_random_bark(self):
        while True:
            username = random.choice(self.users.keys())
            user = self.users[username]
            if user.autobark:
                break
        if random.random() > 0.9:
            messageText = random.choice(self.quotes)
        else:
            words = [random.choice(["woof", "arf", "ruff", "yap"]) for idx in range(random.randint(3, 8))]
            if random.random() > 0.75:
                words.append("@" + random.choice(user.follows))  # one can always dream
            if random.random() > 0.9:
                words.append("#subwoofer")
            messageText = " ".join(words)
        return common.Bark(username, messageText)

    def on_reactor_init(self, event):
        event.reactor.schedule(0, self)
        self.linker.start(event.reactor)

    def on_timer_task(self, event):
        now = time.time()
        if now - self.last_user_reread > self.user_reread_period:
            self.users = common.load_data("users.pickle")
            self.last_user_reread = now

        bark = self.make_random_bark()
        sender = self.linker.sender("//%s/outbox/%s" % (self.hostname, bark.user))
        sender.send(tuple(bark))

        event.reactor.schedule(self.bark_period, self)
예제 #6
0
    def __init__(self, args):
        self.host = args.host
        self.port = args.port
        self.tether = Tether(None, "//%s/bizlogic" % self.host, None,
                             host=self.host, port=self.port,
                             agent_type="bizlogic", policy="ordered")

        self.users = {}
        self.user_reread_period = 30  # seconds
        self.linker = Linker()
        self.container = Container(Processor(self))
        self.container[self.tether.agent] = Agent(self.tether)
예제 #7
0
 def __init__(self, rate, hostname):
     self.users = {}
     try:
         self.quotes = open("quotes.txt").read().split("\n")
     except IOError:
         self.quotes = [
         """"On the Internet, everybody knows you're a dog." --Oscar Wilde"""
         ]
     self.last_user_reread = 0
     self.user_reread_period = 30  # seconds
     self.bark_period = 1.0 / rate  # seconds
     self.linker = Linker()
     self.hostname = hostname
예제 #8
0
    def testLinker(self, address_count=1, message_count=1):
        self.server.max_connections = address_count
        linker = Linker()
        linker.start(self.reactor)
        for i in range(address_count):
            for j in range(message_count):
                snd = linker.sender("//localhost:%s/%s" % (PORT, i))
                assert len(linker.senders) == i + 1
                snd.send(dict(i=i, j=j))
        linker.close()
        self.reactor.run()

        by_addr = dict((i,[]) for i in range(address_count))
        for m in self.sink.messages:
          by_addr[m["i"]].append(m)
        for addr, msgs in by_addr.iteritems():
          self.assertSequenceEqual(msgs, list(sorted(msgs, key=lambda x:(x["i"],x["j"]))))
        self.assertEqual(len(self.sink.messages), address_count*message_count)
예제 #9
0
    def testLinker(self, address_count=1, message_count=1):
        self.server.max_connections = address_count
        linker = Linker()
        linker.start(self.reactor)
        for i in range(address_count):
            for j in range(message_count):
                snd = linker.sender("//localhost:%s/%s" % (PORT, i))
                assert len(linker.senders) == i + 1
                snd.send(dict(i=i, j=j))
        linker.close()
        self.reactor.run()

        by_addr = dict((i, []) for i in range(address_count))
        for m in self.sink.messages:
            by_addr[m["i"]].append(m)
        for addr, msgs in by_addr.iteritems():
            self.assertSequenceEqual(msgs, list(sorted(msgs, key=lambda x: (x["i"], x["j"]))))
        self.assertEqual(len(self.sink.messages), address_count * message_count)