broadcast.rb 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. class Sessions::Event::Broadcast < Sessions::Event::Base
  2. def run
  3. # list all current clients
  4. client_list = Sessions.list
  5. client_list.each { |local_client_id, local_client|
  6. if local_client_id == @client_id
  7. log 'notice', 'do not send broadcast to it self'
  8. next
  9. end
  10. # broadcast to recipient list
  11. if @payload['recipient']
  12. if @payload['recipient'].class != Hash
  13. log 'error', "recipient attribute isn't a hash '#{@payload['recipient'].inspect}'"
  14. elsif !@payload['recipient'].key?('user_id')
  15. log 'error', "need recipient.user_id attribute '#{@payload['recipient'].inspect}'"
  16. elsif @payload['recipient']['user_id'].class != Array
  17. log 'error', "recipient.user_id attribute isn't an array '#{@payload['recipient']['user_id'].inspect}'"
  18. else
  19. @payload['recipient']['user_id'].each { |user_id|
  20. next if local_client[:user]['id'].to_i != user_id.to_i
  21. log 'notice', "send broadcast from (#{@client_id}) to (user_id=#{user_id})", local_client_id
  22. websocket_send(local_client_id, @payload['data'])
  23. }
  24. end
  25. # broadcast every client
  26. else
  27. log 'notice', "send broadcast from (#{@client_id})", local_client_id
  28. websocket_send(local_client_id, @payload['data'])
  29. end
  30. }
  31. false
  32. end
  33. end