Browse code

Pytanie sa na pouzivanie aplikacie sa vola na serveri bez ziadosti klienta

Cinan Rakosnik authored on 06/05/2013 at 23:11:27
Showing 4 changed files
... ...
@@ -47,9 +47,6 @@ this.App =
47 47
     startPollingMessages: ->
48 48
       App.Com.trigger(event: 'app.chat.startPollingMessages')
49 49
 
50
-    whoUseThisApp: ->
51
-      App.Com.trigger(event: 'app.roster.whoUseThisApp')
52
-
53 50
     setPresence: ->
54 51
       App.Com.trigger(event: 'app.roster.setPresence')
55 52
 
... ...
@@ -14,7 +14,6 @@ App.Com.connect( (connected_jid) ->
14 14
   App.Com.initRoster(->
15 15
     App.Com.startFetchingVcards()
16 16
     App.Com.startPollingRoster()
17
-    App.Com.whoUseThisApp()
18 17
     App.Com.setPresence()
19 18
 
20 19
     App.Com.getMe()
... ...
@@ -97,6 +97,11 @@ class WsRosterController < WsController
97 97
     # Zacni pocuvat zmeny stavov v rosteri
98 98
     def start_polling_contacts_state
99 99
         connection_store[:rosters].each do |roster|
100
+            start_polling_control_answer()
101
+            #start_polling_subscription(roster)
102
+            #start_polling_presence(roster)
103
+
104
+            #subscription
100 105
             roster.add_subscription_callback do |roster_item, stanza|
101 106
                 # stan unsubscribe = niekto uz ma nesubscribuje
102 107
                 # stan unsubscribed = niekto ma uz nesubscribuje a aj si ma vymazal
... ...
@@ -110,12 +115,13 @@ class WsRosterController < WsController
110 110
                              belongsTo: client.jid.strip.to_s
111 111
             end
112 112
 
113
+            #presence
113 114
             roster.add_presence_callback do |roster_item, old_presence, new_presence|
114 115
                 if new_presence.type == :unavailable
115 116
                     result = {message: ''}
116 117
 
117 118
                     unless connection_store[:presences][roster_item.jid.strip.to_s].nil?
118
-                        connection_store[:presences][roster_item.jid.strip.to_s].delete(new_presence.from.to_s)
119
+                        connection_store[:presences][roster_item.jid.strip.to_s.to_sym].delete(new_presence.from.to_s)
119 120
                     end
120 121
 
121 122
                     # mozno treba vyhodit cloveka z multichatu, ak som jeho owner
... ...
@@ -124,14 +130,16 @@ class WsRosterController < WsController
124 124
                     status = uniform_presence(new_presence.show)
125 125
                     result = {message: new_presence.status.to_s}
126 126
 
127
-                    if connection_store[:presences][roster_item.jid.strip.to_s].nil?
128
-                        connection_store[:presences][roster_item.jid.strip.to_s] = Hash.new()
127
+                    if connection_store[:presences][roster_item.jid.strip.to_s.to_sym].nil?
128
+                        connection_store[:presences][roster_item.jid.strip.to_s.to_sym] = Hash.new()
129 129
                     end
130 130
 
131
-                    connection_store[:presences][roster_item.jid.strip.to_s][new_presence.from.to_s] = {
131
+                    connection_store[:presences][roster_item.jid.strip.to_s][new_presence.from.to_s.to_sym] = {
132 132
                         status: status,
133 133
                         multichat: false
134 134
                     }
135
+
136
+                    ask_if_using_this_app(connection_store[:link_roster_client][roster], new_presence.from.strip.to_s)
135 137
                 end
136 138
 
137 139
                 result[:status] = select_most_online_status(roster_item.jid.strip.to_s)
... ...
@@ -228,18 +236,6 @@ class WsRosterController < WsController
228 228
         end
229 229
     end
230 230
 
231
-    def ask_if_using_this_app
232
-        connection_store[:rosters].each do |roster|
233
-            client = connection_store[:link_roster_client][roster]
234
-
235
-            roster.items.each do |jid, contact|
236
-                client.send(MessageBuilder::control_question(client.jid.strip.to_s, jid))
237
-            end
238
-        end
239
-
240
-        start_polling_control_answer()
241
-    end
242
-
243 231
     ##
244 232
     # Pridaj noveho priatela do zoznamu
245 233
     def add_friend(data)
... ...
@@ -285,12 +281,22 @@ class WsRosterController < WsController
285 285
         connection_store[:clients].each do |client|
286 286
             client.add_message_callback do |message|
287 287
                 if message.attribute('i_am_using_same_app')
288
+                    connection_store[:presences][message.from.strip.to_s][message.from.to_s.to_sym][multichat: true]
289
+
288 290
                     send_message 'app.roster.using_this_app',
289
-                                 jid: message.from.node + '@' + message.from.domain
291
+                                 jid: message.from.strip.to_s
290 292
                 elsif message.attribute('are_you_using_my_app')
291
-                    client.send(MessageBuilder::control_answer(client.jid.strip.to_s, message.from))
293
+                    client.send(MessageBuilder::control_answer(client.jid.to_s, message.from.to_s))
292 294
                 end
293 295
             end
294 296
         end
295 297
     end
298
+
299
+    def ask_if_using_this_app(client, contact)
300
+        return unless connection_store[:presences][contact]
301
+
302
+        connection_store[:presences][contact].each do |jid_resource, state|
303
+            client.send(MessageBuilder::control_question(client.jid.to_s, jid_resource.to_s))
304
+        end
305
+    end
296 306
 end
... ...
@@ -57,7 +57,6 @@ WebsocketRails::EventMap.describe do
57 57
             subscribe :updateMyStatus,      to: WsRosterController, with_method: :me_update_status
58 58
             subscribe :updateMyVcard,       to: WsRosterController, with_method: :me_update_vcard
59 59
             subscribe :removeContact,       to: WsRosterController, with_method: :remove_contact
60
-            subscribe :whoUseThisApp,       to: WsRosterController, with_method: :ask_if_using_this_app
61 60
         end
62 61
 
63 62
         namespace :chat do