2a61cdcc |
class WsController < WebsocketRails::BaseController
protected
|
7d2a86e9 |
def set_contacts_in_multichat(client, chat_id, owner, attendants = []) |
0f555f4a |
connection_store[:opened_chats] = {} if ! connection_store[:opened_chats]
connection_store[:opened_chats][client] = {} if ! connection_store[:opened_chats][client]
connection_store[:opened_chats][client][chat_id] = {owner: owner, attendants: attendants}
end
|
2a61cdcc |
def find_client(client_jid)
connection_store[:clients].find do |client|
client.jid.strip.to_s == client_jid
end
end
|
bc02cb76 |
def where_i_am_multichat_owner(client)
chats_owner = []
if connection_store[:opened_chats] and connection_store[:opened_chats][client]
connection_store[:opened_chats][client].each do |chat_id, contacts|
if contacts[:owner] == client.jid.to_s
chats_owner << chat_id |
5011e360 |
end
end
end
chats_owner
end
|
bc02cb76 |
def kick_from_all_multichats(client, somebody_to_kick)
chats = where_i_am_multichat_owner(client)
chats.each do |chat_id| |
5011e360 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
fc026409 |
#TODO: kontrola, ak ten clovek sa nenasiel v mutlichate - tak nic nerob |
bc02cb76 |
contacts -= [somebody_to_kick.to_s] |
5011e360 |
if contacts.empty? |
90472b75 |
destroy_multichat(client.jid, chat_id) |
5011e360 |
else
contacts.each do |contact| |
90472b75 |
client.send(MessageBuilder::send_multichat_contacts(client.jid.to_s, contact, chat_id, contacts)) |
5011e360 |
end
|
90472b75 |
sync_contacts_frontend(client.jid, client.jid, chat_id, contacts) |
5011e360 |
end
end
end
|
bc02cb76 |
def kick_myself_from_multichat(client, owner)
if connection_store[:opened_chats] and connection_store[:opened_chats][client]
connection_store[:opened_chats][client].each do |chat_id, chat|
if chat[:owner] == owner.to_s and chat[:attendants].include? client.jid.to_s
destroy_multichat(client.jid, chat_id)
end
end
end
end
|
90472b75 |
def sync_contacts_frontend(owner, me, chat_id, contacts) |
5011e360 |
send_message 'app.chat.updateSyncedContacts', |
90472b75 |
me: me.strip.to_s,
contacts: strip_all(contacts),
owner: owner.strip.to_s, |
5011e360 |
chat_id: chat_id
end
|
90472b75 |
def destroy_multichat(me, chat_id)
client = find_client(me.strip.to_s) |
88c1de39 |
connection_store[:opened_chats][client].delete(chat_id)
send_message 'app.chat.destroyMultichat', chat_id: chat_id
end
|
5011e360 |
def xml_contacts_to_array(xml_contacts)
xml_contacts.get_elements('contact').map do |contact|
contact.text
end
end |
e513299a |
def find_multichat_supported(jid_stripped)
contact = connection_store[:presences][jid_stripped.to_sym].find do |resource, info|
info[:multichat]
end
contact.first
end
def strip_all(contacts)
if contacts.is_a? Array
contacts.map do |jid|
Jabber::JID.new(jid).strip!.to_s
end
else
contacts
end
end |
2a61cdcc |
end |