Advertisement
Guest User

Untitled

a guest
Sep 28th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. from datetime import datetime
  2. from queue import PriorityQueue
  3.  
  4. def generate_sid():
  5. current_sid = 1
  6. while True:
  7. yield str(current_sid)
  8. current_sid += 1
  9.  
  10.  
  11. class SessionManager:
  12. __sid_generator = generate_sid()
  13. __sessions = {}
  14. __sessions_queue = PriorityQueue()
  15.  
  16. def createSession(self, id):
  17. sid = next(self.__sid_generator)
  18. current_time = datetime.now()
  19. self.__sessions[sid] = (id, current_time)
  20. self.__sessions_queue.put((current_time, sid))
  21. return sid
  22.  
  23. def checkSession(self, sid: str):
  24. session = self.__sessions.get(sid)
  25. if session:
  26. id, previous_time = session
  27. current_time = datetime.now()
  28. time_delta = current_time - previous_time
  29. if time_delta.seconds > 600:
  30. del self.__sessions[sid]
  31. return None
  32. else:
  33. self.__sessions[sid] = (id, current_time)
  34. self.__sessions_queue.put((current_time, sid))
  35. return id
  36. else:
  37. return None
  38.  
  39. def cleanup(self):
  40. current_time = datetime.now()
  41. if self.__sessions_queue.empty():
  42. return
  43. queue_time, sid = self.__sessions_queue.get()
  44. while (current_time - queue_time).seconds > 600 and not self.__sessions_queue.empty():
  45. session = self.__sessions.get(sid)
  46. if session:
  47. if (current_time - session[1]).seconds > 600:
  48. del self.__sessions[sid]
  49. queue_time, sid = self.__sessions_queue.get()
  50. self.__sessions_queue.put((queue_time, sid))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement