client.rb 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. class Sessions::Client
  2. def initialize(client_id)
  3. @client_id = client_id
  4. log '---client start ws connection---'
  5. fetch
  6. log '---client exiting ws connection---'
  7. end
  8. def fetch
  9. backends = [
  10. 'Sessions::Backend::TicketOverviewList',
  11. 'Sessions::Backend::Collections',
  12. 'Sessions::Backend::ActivityStream',
  13. 'Sessions::Backend::TicketCreate',
  14. ]
  15. asset_lookup = {}
  16. backend_pool = []
  17. user_id_last_run = nil
  18. loop_count = 0
  19. loop do
  20. # get connection user
  21. session_data = Sessions.get(@client_id)
  22. return if !session_data
  23. return if !session_data[:user]
  24. return if !session_data[:user]['id']
  25. user = User.lookup(id: session_data[:user]['id'])
  26. return if !user
  27. # init new backends
  28. if user_id_last_run != user.id
  29. user_id_last_run = user.id
  30. asset_lookup = {}
  31. # release old objects
  32. backend_pool.collect! {
  33. nil
  34. }
  35. # create new pool
  36. backend_pool = []
  37. backends.each { |backend|
  38. item = backend.constantize.new(user, asset_lookup, self, @client_id)
  39. backend_pool.push item
  40. }
  41. end
  42. loop_count += 1
  43. log "---client - looking for data of user #{user.id}"
  44. # push messages from backends
  45. backend_pool.each(&:push)
  46. log '---/client-'
  47. # start faster in the beginnig
  48. if loop_count < 20
  49. sleep 0.6
  50. else
  51. sleep 1
  52. end
  53. end
  54. end
  55. # send update to browser
  56. def send(data)
  57. Sessions.send(@client_id, data)
  58. end
  59. def log(msg)
  60. Rails.logger.debug "client(#{@client_id}) #{msg}"
  61. end
  62. end