class SessionManager(object): def __init__(self): #self._OTSDK = OpenTokSDK.OpenTokSDK(settings.OPENTOK_API_KEY,settings.OPENTOK_API_SECRET) self._session_properties = {OpenTokSDK.SessionProperties.p2p_preference: "enabled"} self._sessions_dao = SessionsDao() self._profiles_dao = ProfilesDao() def join_or_create_session(self, user, event_slug): print "join_or_create_session" user_profile = self._profiles_dao.get_by_id(int(user)) while True: peer_id, session_id = self._sessions_dao.try_join_session(user,user_profile,event_slug) if peer_id != user: break # Prevent us from joining ourself if not peer_id: session_id = self._sessions_dao.create_session(user,user_profile,event_slug) print "creating for user %s - %s"%(user,session_id) peer_id = user else: print "joining user %s to user %s - %s"%(user,peer_id, session_id) return peer_id,session_id def heartbeat(self,session_id,user): print "hearbeat: %s - %s"%(user,session_id) now, heartbeats, seen, match_score = self._sessions_dao.heartbeat(session_id, user) self._profiles_dao.heartbeat(session_id, user) profile_ids = heartbeats.keys() profiles = dict() for profile_id in profile_ids: profiles[profile_id] = self._profiles_dao.get_by_id(int(profile_id)) # TODO: Fix ugly hack if 'last_heartbeat' in profiles[profile_id]: del profiles[profile_id]['last_heartbeat'] # UGLY HACK print "SEENS", seen if len(seen) > 0: self._profiles_dao.add_seen_users_and_match(user, seen, match_score) return now, heartbeats, profiles, self._profiles_dao.get_num_alive_users() def get_alive_sessions(self): return self._sessions_dao.get_alive_sessions() @staticmethod def _createAuthToken(serviceId, userId, expiry, apiSecret): apiSecretKey = jwt.base64url_decode(apiSecret) subject = serviceId + ":" + userId payload = { "sub" : subject, "iss" : serviceId, "exp" : expiry } return jwt.encode(payload, apiSecretKey); def login(self,user): return self._createAuthToken(settings.VLINE_SERVICE_ID,user,time.time()+TOKEN_EXPIRY,settings.VLINE_API_SECRET)
def __init__(self): #self._OTSDK = OpenTokSDK.OpenTokSDK(settings.OPENTOK_API_KEY,settings.OPENTOK_API_SECRET) self._session_properties = {OpenTokSDK.SessionProperties.p2p_preference: "enabled"} self._sessions_dao = SessionsDao() self._profiles_dao = ProfilesDao()