| ... | ... |
@@ -3,22 +3,29 @@ class WsChatController < WsController |
| 3 | 3 |
def start_polling_messages |
| 4 | 4 |
connection_store[:clients].each do |client| |
| 5 | 5 |
client.add_message_callback do |message| |
| 6 |
- #noinspection RubyAssignmentExpressionInConditionalInspection |
|
| 6 |
+ from = message.from.strip.to_s |
|
| 7 |
+ to = message.to.strip.to_s |
|
| 8 |
+ chat_id = message.attribute('chat_id').to_s
|
|
| 7 | 9 |
|
| 10 |
+ #noinspection RubyAssignmentExpressionInConditionalInspection |
|
| 8 | 11 |
if message.body |
| 9 |
- process_incoming_message(message) |
|
| 12 |
+ process_incoming_message(from, to, message.body, chat_id) |
|
| 10 | 13 |
elsif request = message.first_element('sync_contacts_request')
|
| 11 | 14 |
# toto mozem prijat len ako admin multichatu |
| 12 |
- send_contacts(message, request.attribute('chat_id').to_s)
|
|
| 15 |
+ send_contacts(from, to, request.attribute('chat_id').to_s)
|
|
| 13 | 16 |
elsif answer = message.first_element('synced_contacts')
|
| 14 | 17 |
# toto mozem prijat len ako ucastnik multichatu (nie admin) |
| 15 |
- sync_contacts_frontend(message, answer.attribute('chat_id').to_s)
|
|
| 18 |
+ contacts = xml_contacts_to_array(answer) |
|
| 19 |
+ sync_contacts_frontend(from, to, answer.attribute('chat_id').to_s, contacts)
|
|
| 16 | 20 |
elsif answer = message.first_element('exported_chat')
|
| 17 |
- import_people_in_chat(message, answer.attribute('chat_id').to_s)
|
|
| 21 |
+ contacts = xml_contacts_to_array(message.first_element('exported_chat'))
|
|
| 22 |
+ import_people_in_chat(from, to, answer.attribute('chat_id').to_s, contacts)
|
|
| 18 | 23 |
elsif message.attribute('destroy_multichat')
|
| 19 |
- destroy_multichat(message, message.attribute('chat_id').to_s)
|
|
| 24 |
+ destroy_multichat(to, chat_id) |
|
| 20 | 25 |
elsif message.attribute('req_update_contacts')
|
| 21 |
- update_attendants_in_multichat(message, message.attribute('chat_id').to_s)
|
|
| 26 |
+ added = xml_contacts_to_array(message.first_element('added'))
|
|
| 27 |
+ removed = xml_contacts_to_array(message.first_element('removed'))
|
|
| 28 |
+ update_attendants_in_multichat(from, to, chat_id, removed, added) |
|
| 22 | 29 |
end |
| 23 | 30 |
#TODO: upozornit na pisanie spravy |
| 24 | 31 |
#TODO: odoslat informaciu o tom, ze pisem spravu |
| ... | ... |
@@ -33,20 +40,19 @@ class WsChatController < WsController |
| 33 | 33 |
end |
| 34 | 34 |
end |
| 35 | 35 |
|
| 36 |
- def import_people_in_chat(message, chat_id) |
|
| 36 |
+ def import_people_in_chat(from, to, chat_id, contacts) |
|
| 37 | 37 |
#Rails.logger.debug ['imported chat arrived', message.to_s, chat_id] |
| 38 | 38 |
|
| 39 |
- client = find_client(message.to.strip.to_s) |
|
| 40 |
- contacts = xml_contacts_to_array(message.first_element('exported_chat'))
|
|
| 39 |
+ client = find_client(to) |
|
| 41 | 40 |
|
| 42 | 41 |
connection_store[:opened_chats] = {} if ! connection_store[:opened_chats]
|
| 43 | 42 |
connection_store[:opened_chats][client] = {} if ! connection_store[:opened_chats][client]
|
| 44 |
- connection_store[:opened_chats][client][chat_id] = {attendants: contacts, owner: message.from.strip.to_s}
|
|
| 43 |
+ connection_store[:opened_chats][client][chat_id] = {attendants: contacts, owner: from}
|
|
| 45 | 44 |
|
| 46 | 45 |
#Rails.logger.debug [connection_store[:opened_chats][client], client.jid.to_s] |
| 47 | 46 |
|
| 48 | 47 |
send_message 'app.chat.importChat', |
| 49 |
- owner: message.from.strip.to_s, |
|
| 48 |
+ owner: from, |
|
| 50 | 49 |
chat_id: chat_id, |
| 51 | 50 |
contacts: contacts |
| 52 | 51 |
end |
| ... | ... |
@@ -162,48 +168,45 @@ class WsChatController < WsController |
| 162 | 162 |
|
| 163 | 163 |
private |
| 164 | 164 |
|
| 165 |
- def process_incoming_message(message) |
|
| 165 |
+ def process_incoming_message(from, to, body, chat_id = nil) |
|
| 166 | 166 |
#Rails.logger.debug [message, message.to.strip.to_s] |
| 167 | 167 |
send_message 'app.chat.messageReceived', |
| 168 |
- from: message.from.strip.to_s, |
|
| 169 |
- to: message.to.strip.to_s, |
|
| 170 |
- message: message.body, |
|
| 171 |
- chat_id: message.attribute('chat_id').to_s
|
|
| 168 |
+ from: from, |
|
| 169 |
+ to: to, |
|
| 170 |
+ message: body, |
|
| 171 |
+ chat_id: chat_id |
|
| 172 | 172 |
end |
| 173 | 173 |
|
| 174 |
- def send_contacts(message, chat_id) |
|
| 175 |
- from = message.from.strip.to_s |
|
| 176 |
- client = find_client(message.to.strip.to_s) |
|
| 174 |
+ def send_contacts(from, to, chat_id) |
|
| 175 |
+ client = find_client(to) |
|
| 177 | 176 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
| 178 | 177 |
client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, from, chat_id, contacts)) |
| 179 | 178 |
end |
| 180 | 179 |
|
| 181 |
- def destroy_multichat(message, chat_id) |
|
| 182 |
- client = find_client(message.to.strip.to_s) |
|
| 180 |
+ def destroy_multichat(to, chat_id) |
|
| 181 |
+ client = find_client(to) |
|
| 183 | 182 |
connection_store[:opened_chats][client].delete(chat_id) |
| 184 | 183 |
|
| 185 | 184 |
send_message 'app.chat.destroyMultichat', chat_id: chat_id |
| 186 | 185 |
end |
| 187 | 186 |
|
| 188 |
- def update_attendants_in_multichat(message, chat_id) |
|
| 189 |
- client = find_client(message.to.strip.to_s) |
|
| 190 |
- added = message.first_element('added')
|
|
| 191 |
- removed = message.first_element('removed')
|
|
| 187 |
+ def update_attendants_in_multichat(from, to, chat_id, removed, added) |
|
| 188 |
+ client = find_client(to) |
|
| 192 | 189 |
|
| 193 | 190 |
contacts = connection_store[:opened_chats][client][chat_id][:attendants] |
| 194 |
- contacts -= xml_contacts_to_array(removed) |
|
| 195 |
- contacts += xml_contacts_to_array(added) |
|
| 191 |
+ contacts -= removed |
|
| 192 |
+ contacts += added |
|
| 196 | 193 |
|
| 197 | 194 |
connection_store[:opened_chats][client][chat_id][:attendants] = contacts |
| 198 | 195 |
|
| 199 | 196 |
if contacts.empty? |
| 200 |
- destroy_multichat(message, chat_id) |
|
| 197 |
+ destroy_multichat(to, chat_id) |
|
| 201 | 198 |
else |
| 202 | 199 |
contacts.each do |contact| |
| 203 |
- client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, contact, chat_id, contacts)) |
|
| 200 |
+ client.send(MessageBuilder::send_multichat_contacts(to, contact, chat_id, contacts)) |
|
| 204 | 201 |
end |
| 205 | 202 |
|
| 206 |
- sync_contacts_frontend(MessageBuilder::send_multichat_contacts('', client.jid.strip.to_s, chat_id, contacts), chat_id)
|
|
| 203 |
+ sync_contacts_frontend(from, to, chat_id, contacts) |
|
| 207 | 204 |
end |
| 208 | 205 |
end |
| 209 | 206 |
end |
| 210 | 207 |
\ No newline at end of file |
| ... | ... |
@@ -40,18 +40,16 @@ class WsController < WebsocketRails::BaseController |
| 40 | 40 |
client.send(MessageBuilder::send_multichat_contacts(client.jid.strip.to_s, contact, chat_id, contacts)) |
| 41 | 41 |
end |
| 42 | 42 |
|
| 43 |
- sync_contacts_frontend(MessageBuilder::send_multichat_contacts('', client.jid.strip.to_s, chat_id, contacts), chat_id)
|
|
| 43 |
+ sync_contacts_frontend('', client.jid.strip.to_s, chat_id, contacts)
|
|
| 44 | 44 |
end |
| 45 | 45 |
end |
| 46 | 46 |
end |
| 47 | 47 |
|
| 48 |
- def sync_contacts_frontend(message, chat_id) |
|
| 49 |
- contacts = xml_contacts_to_array(message.first_element('synced_contacts'))
|
|
| 50 |
- |
|
| 48 |
+ def sync_contacts_frontend(from, to, chat_id, contacts) |
|
| 51 | 49 |
send_message 'app.chat.updateSyncedContacts', |
| 52 |
- me: message.to.strip.to_s, |
|
| 50 |
+ me: to, |
|
| 53 | 51 |
contacts: contacts, |
| 54 |
- owner: message.from.strip.to_s, |
|
| 52 |
+ owner: from, |
|
| 55 | 53 |
chat_id: chat_id |
| 56 | 54 |
end |
| 57 | 55 |
|
| ... | ... |
@@ -109,7 +109,7 @@ class WsRosterController < WsController |
| 109 | 109 |
if new_presence.type == :unavailable |
| 110 | 110 |
result = {status: :offline, message: ''}
|
| 111 | 111 |
# mozno treba vyhodit cloveka z multichatu, ak som jeho owner |
| 112 |
- kick_from_multichat2(roster_item.jid.strip.to_s) |
|
| 112 |
+ #kick_from_multichat2(roster_item.jid.strip.to_s) |
|
| 113 | 113 |
else |
| 114 | 114 |
status = uniform_presence(new_presence.show) |
| 115 | 115 |
result = { status: status, message: new_presence.status.to_s }
|