| ... | ... |
@@ -16,7 +16,7 @@ this.App = |
| 16 | 16 |
App._dispatcher = new WebSocketRails('www.xmpp.dev:3000/websocket')
|
| 17 | 17 |
App._dispatcher.on_open = => |
| 18 | 18 |
@_setupBackboneComponents() |
| 19 |
- @_bindEvents() |
|
| 19 |
+ @_bindListeners() |
|
| 20 | 20 |
callback?() |
| 21 | 21 |
|
| 22 | 22 |
trigger: (options) -> |
| ... | ... |
@@ -43,6 +43,9 @@ this.App = |
| 43 | 43 |
startPollingRoster: -> |
| 44 | 44 |
App.Com.trigger(event: 'app.roster.startPolling') |
| 45 | 45 |
|
| 46 |
+ startPollingMessages: -> |
|
| 47 |
+ App.Com.trigger(event: 'app.chat.startPollingMessages') |
|
| 48 |
+ |
|
| 46 | 49 |
setPresence: -> |
| 47 | 50 |
App.Com.trigger(event: 'app.roster.setPresence') |
| 48 | 51 |
|
| ... | ... |
@@ -77,7 +80,7 @@ this.App = |
| 77 | 77 |
|
| 78 | 78 |
App.Views.tabbar = new Xmpp.Views.Tabbar.TabbarView() |
| 79 | 79 |
|
| 80 |
- _bindEvents: -> |
|
| 80 |
+ _bindListeners: -> |
|
| 81 | 81 |
App._dispatcher.bind('app.roster.statusChanged', (result) ->
|
| 82 | 82 |
App.debug 'change contact state' |
| 83 | 83 |
App.Collections.contacts.updateStatus(result) |
| ... | ... |
@@ -93,6 +96,36 @@ this.App = |
| 93 | 93 |
App.Collections.contacts.subscriptionChanged(subscription) |
| 94 | 94 |
) |
| 95 | 95 |
|
| 96 |
+ App._dispatcher.bind('app.chat.messageReceived', (result) ->
|
|
| 97 |
+ App.debug 'message received' |
|
| 98 |
+ |
|
| 99 |
+ contact = App.Collections.contacts.findByJid(result.from) |
|
| 100 |
+ |
|
| 101 |
+ if contact |
|
| 102 |
+ contactView = App.Collections.contacts.friendsList.hasContact(contact) || |
|
| 103 |
+ App.Collections.contacts.activeList.hasContact(contact) |
|
| 104 |
+ else |
|
| 105 |
+ contact = new Xmpp.Models.Contact( |
|
| 106 |
+ id: result.from |
|
| 107 |
+ jid: result.from |
|
| 108 |
+ belongsTo: [result.to] |
|
| 109 |
+ ) |
|
| 110 |
+ App.Collections.contacts.add(contact, merge: true) |
|
| 111 |
+ contactView = App.Collections.contacts.friendsList.hasContact(contact) |
|
| 112 |
+ |
|
| 113 |
+ contactView.startChat() |
|
| 114 |
+ |
|
| 115 |
+ tab = _.find(App.Views.tabbar.tabs, (tab) -> |
|
| 116 |
+ tab.hasParticipants(App.Models.me, contact) |
|
| 117 |
+ ) |
|
| 118 |
+ |
|
| 119 |
+ tab.chatWindow.appendMessage(contact, new Date(), result.message) |
|
| 120 |
+ |
|
| 121 |
+# if (result.chat_id) |
|
| 122 |
+# #todo otvorit chat podla chat_id. Spytat sa servera, kto vsetko je ucastnikom |
|
| 123 |
+# #chat = App.Collections.chats.findById(result.chat_id) |
|
| 124 |
+ ) |
|
| 125 |
+ |
|
| 96 | 126 |
Models: |
| 97 | 127 |
me: null |
| 98 | 128 |
|
| ... | ... |
@@ -30,5 +30,8 @@ class Xmpp.Collections.ChatsCollection extends Backbone.Collection |
| 30 | 30 |
chat.get('who') == who && chat.get('withWhom') == withWhom
|
| 31 | 31 |
) |
| 32 | 32 |
|
| 33 |
+ findById: (id) -> |
|
| 34 |
+ @findWhere(chatId: id) |
|
| 35 |
+ |
|
| 33 | 36 |
removeChat: (chat) -> |
| 34 | 37 |
@models = _.without(@openedChats, chat) |
| 35 | 38 |
\ No newline at end of file |
| ... | ... |
@@ -6,7 +6,7 @@ class Xmpp.Models.Contact extends Xmpp.Models.Model |
| 6 | 6 |
name: '' |
| 7 | 7 |
status: 'offline' |
| 8 | 8 |
message: '' |
| 9 |
- avatar: '' |
|
| 9 |
+ avatar: 'assets/avatar.png' |
|
| 10 | 10 |
belongsTo: [] |
| 11 | 11 |
|
| 12 | 12 |
initialize: -> |
| ... | ... |
@@ -100,10 +100,14 @@ class Xmpp.Collections.ContactsCollection extends Backbone.Collection |
| 100 | 100 |
|
| 101 | 101 |
# ignore 'unsubscribe' type of action |
| 102 | 102 |
|
| 103 |
+ # toto sem asi nepatri, ale asi do views. Nic to v skutocnosti nerobi s modelmi. |
|
| 103 | 104 |
filter: (searchTerm) -> |
| 104 | 105 |
@friendsList.filter(searchTerm) |
| 105 | 106 |
@activeList.filter(searchTerm) |
| 106 | 107 |
|
| 108 |
+ findByJid: (jid) -> |
|
| 109 |
+ @get(jid) |
|
| 110 |
+ |
|
| 107 | 111 |
_switchContactBelongingList: (contact, fromList, toList) -> |
| 108 | 112 |
if !contact? |
| 109 | 113 |
false |
| ... | ... |
@@ -1,5 +1,28 @@ |
| 1 | 1 |
class WsChatController < WsController |
| 2 | 2 |
|
| 3 |
+ def start_polling_messages |
|
| 4 |
+ connection_store[:clients].each do |client| |
|
| 5 |
+ client.add_message_callback do |message| |
|
| 6 |
+ if message.body |
|
| 7 |
+ send_message 'app.chat.messageReceived', |
|
| 8 |
+ from: message.from.strip.to_s, |
|
| 9 |
+ to: message.to.strip.to_s, |
|
| 10 |
+ message: message.body, |
|
| 11 |
+ chat_id: if message.attribute(:is_simulating) then message.attribute(:chat_id) end |
|
| 12 |
+ end |
|
| 13 |
+ #TODO: upozornit na pisanie spravy |
|
| 14 |
+ #TODO: odoslat informaciu o tom, ze pisem spravu |
|
| 15 |
+ #else |
|
| 16 |
+ # send_message 'app.chat.messageState', |
|
| 17 |
+ # state: message.chat_state, |
|
| 18 |
+ # from: message.from.strip.to_s, |
|
| 19 |
+ # to: message.to.strip.to_s, |
|
| 20 |
+ # message: message.body, |
|
| 21 |
+ # chat_id: if message.attribute(:is_simulating) then message.attribute(:chat_id) end |
|
| 22 |
+ end |
|
| 23 |
+ end |
|
| 24 |
+ end |
|
| 25 |
+ |
|
| 3 | 26 |
def open_chat |
| 4 | 27 |
id = Time.now.to_f |
| 5 | 28 |
me = message[:chatOwner] |
| ... | ... |
@@ -63,6 +63,7 @@ WebsocketRails::EventMap.describe do |
| 63 | 63 |
subscribe :newChatId, to: WsChatController, with_method: :open_chat |
| 64 | 64 |
subscribe :addToChat, to: WsChatController, with_method: :add_to_chat |
| 65 | 65 |
subscribe :sendMessage, to: WsChatController, with_method: :send_chat_message |
| 66 |
+ subscribe :startPollingMessages,to: WsChatController, with_method: :start_polling_messages |
|
| 66 | 67 |
end |
| 67 | 68 |
end |
| 68 | 69 |
end |