Sapan Bhatia | 26d40bc | 2014-05-12 15:28:02 -0400 | [diff] [blame] | 1 | import threading |
| 2 | import requests, json |
| 3 | |
| 4 | from planetstack.config import Config |
| 5 | |
| 6 | import uuid |
| 7 | import os |
| 8 | import imp |
| 9 | import inspect |
| 10 | import base64 |
| 11 | from fofum import Fofum |
| 12 | import json |
| 13 | import traceback |
| 14 | |
| 15 | # decorator that marks dispatachable event methods |
| 16 | def event(func): |
| 17 | setattr(func, 'event', func.__name__) |
| 18 | return func |
| 19 | |
| 20 | class EventHandler: |
| 21 | # This code is currently not in use. |
| 22 | def __init__(self): |
| 23 | pass |
| 24 | |
| 25 | @staticmethod |
| 26 | def get_events(): |
| 27 | events = [] |
| 28 | for name in dir(EventHandler): |
| 29 | attribute = getattr(EventHandler, name) |
| 30 | if hasattr(attribute, 'event'): |
| 31 | events.append(getattr(attribute, 'event')) |
| 32 | return events |
| 33 | |
| 34 | def dispatch(self, event, *args, **kwds): |
| 35 | if hasattr(self, event): |
| 36 | return getattr(self, event)(*args, **kwds) |
| 37 | |
| 38 | |
| 39 | class EventSender: |
| 40 | def __init__(self,user=None,clientid=None): |
| 41 | try: |
| 42 | user = Config().feefie_client_user |
| 43 | except: |
| 44 | user = 'pl' |
| 45 | |
| 46 | try: |
| 47 | clid = Config().feefie_client_id |
| 48 | except: |
| 49 | clid = self.random_client_id() |
| 50 | |
| 51 | |
| 52 | self.fofum = Fofum(user=user) |
| 53 | self.fofum.make(clid) |
| 54 | |
| 55 | def fire(self,**kwargs): |
| 56 | kwargs["uuid"] = str(uuid.uuid1()) |
| 57 | self.fofum.fire(json.dumps(kwargs)) |
| 58 | |
| 59 | class EventListener: |
| 60 | def __init__(self,wake_up=None): |
| 61 | self.handler = EventHandler() |
| 62 | self.wake_up = wake_up |
| 63 | |
| 64 | def handle_event(self, payload): |
| 65 | payload_dict = json.loads(payload) |
| 66 | |
| 67 | if (self.wake_up): |
| 68 | self.wake_up() |
| 69 | |
| 70 | def random_client_id(self): |
| 71 | try: |
| 72 | return self.client_id |
| 73 | except AttributeError: |
| 74 | self.client_id = base64.urlsafe_b64encode(os.urandom(12)) |
| 75 | return self.client_id |
| 76 | |
| 77 | def run(self): |
| 78 | # This is our unique client id, to be used when firing and receiving events |
| 79 | # It needs to be generated once and placed in the config file |
| 80 | |
| 81 | try: |
| 82 | user = Config().feefie_client_user |
| 83 | except: |
| 84 | user = 'pl' |
| 85 | |
| 86 | try: |
| 87 | clid = Config().feefie_client_id |
| 88 | except: |
| 89 | clid = self.random_client_id() |
| 90 | |
| 91 | f = Fofum(user=user) |
| 92 | |
| 93 | listener_thread = threading.Thread(target=f.listen_for_event,args=(clid,self.handle_event)) |
| 94 | listener_thread.start() |