base.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. class Sessions::Event::Base
  2. def initialize(params)
  3. params.each do |key, value|
  4. instance_variable_set "@#{key}", value
  5. end
  6. @is_web_socket = false
  7. return if !@clients[@client_id]
  8. @is_web_socket = true
  9. return if !self.class.instance_variable_get(:@database_connection)
  10. ActiveRecord::Base.establish_connection
  11. end
  12. def websocket_send(recipient_client_id, data)
  13. msg = if data.class != Array
  14. "[#{data.to_json}]"
  15. else
  16. data.to_json
  17. end
  18. if @clients[recipient_client_id]
  19. log 'debug', "ws send #{msg}", recipient_client_id
  20. @clients[recipient_client_id][:websocket].send(msg)
  21. else
  22. log 'debug', "fs send #{msg}", recipient_client_id
  23. Sessions.send(recipient_client_id, data)
  24. end
  25. end
  26. def valid_session?
  27. if !@session
  28. error = {
  29. event: 'error',
  30. data: {
  31. state: 'no_session',
  32. },
  33. }
  34. Sessions.send(@client_id, error)
  35. return
  36. end
  37. if !@session['id']
  38. error = {
  39. event: 'error',
  40. data: {
  41. state: 'no_session_user_id',
  42. },
  43. }
  44. Sessions.send(@client_id, error)
  45. return
  46. end
  47. true
  48. end
  49. def current_user_id
  50. if !@session
  51. error = {
  52. event: "#{event}_error",
  53. data: {
  54. state: 'no_session',
  55. },
  56. }
  57. Sessions.send(@client_id, error)
  58. return
  59. end
  60. if @session['id'].blank?
  61. error = {
  62. event: "#{event}_error",
  63. data: {
  64. state: 'no_session_user_id',
  65. },
  66. }
  67. Sessions.send(@client_id, error)
  68. return
  69. end
  70. @session['id']
  71. end
  72. def current_user
  73. user_id = current_user_id
  74. return if !user_id
  75. user = User.find_by(id: user_id)
  76. if !user
  77. error = {
  78. event: "#{event}_error",
  79. data: {
  80. state: 'no_such_user',
  81. },
  82. }
  83. Sessions.send(@client_id, error)
  84. return
  85. end
  86. user
  87. end
  88. def permission_check(key, event)
  89. user = current_user
  90. return if !user
  91. if !user.permissions?(key)
  92. error = {
  93. event: "#{event}_error",
  94. data: {
  95. state: 'no_permission',
  96. },
  97. }
  98. Sessions.send(@client_id, error)
  99. return
  100. end
  101. true
  102. end
  103. def log(level, data, client_id = nil)
  104. if !@options[:v]
  105. return if level == 'debug'
  106. end
  107. if !client_id
  108. client_id = @client_id
  109. end
  110. # rubocop:disable Rails/Output
  111. puts "#{Time.now.utc.iso8601}:client(#{client_id}) #{data}"
  112. #puts "#{Time.now.utc.iso8601}:#{ level }:client(#{ client_id }) #{ data }"
  113. # rubocop:enable Rails/Output
  114. #Rails.logger.info "#{Time.now.utc.iso8601}:client(#{client_id}) #{data}"
  115. end
  116. def self.database_connection_required
  117. @database_connection = true
  118. end
  119. def destroy
  120. return if !@is_web_socket
  121. return if !self.class.instance_variable_get(:@database_connection)
  122. ActiveRecord::Base.remove_connection
  123. end
  124. end