瀏覽代碼

Adds a MemberList module and (currently disabled) code to show the dialpad button.

master
Boris Grozev 10 年之前
父節點
當前提交
0efcbdcd37
共有 4 個檔案被更改,包括 143 行新增0 行删除
  1. 2
    0
      app.js
  2. 13
    0
      modules/UI/UI.js
  3. 123
    0
      modules/members/MemberList.js
  4. 5
    0
      service/members/Events.js

+ 2
- 0
app.js 查看文件

@@ -16,6 +16,7 @@ var APP =
16 16
         this.translation = require("./modules/translation/translation");
17 17
         this.settings = require("./modules/settings/Settings");
18 18
         this.DTMF = require("./modules/DTMF/DTMF");
19
+        this.members = require("./modules/members/MemberList");
19 20
     }
20 21
 };
21 22
 
@@ -30,6 +31,7 @@ function init() {
30 31
     APP.desktopsharing.init();
31 32
 
32 33
     APP.keyboardshortcut.init();
34
+    APP.members.start();
33 35
 }
34 36
 
35 37
 

+ 13
- 0
modules/UI/UI.js 查看文件

@@ -26,6 +26,7 @@ var DesktopSharingEventTypes
26 26
 var RTCEvents = require("../../service/RTC/RTCEvents");
27 27
 var StreamEventTypes = require("../../service/RTC/StreamEventTypes");
28 28
 var XMPPEvents = require("../../service/xmpp/XMPPEvents");
29
+var MemberEvents = require("../../service/members/Events");
29 30
 
30 31
 var eventEmitter = new EventEmitter();
31 32
 var roomName = null;
@@ -224,6 +225,8 @@ function registerListeners() {
224 225
             VideoLayout.setDeviceAvailabilityIcons(resource, devices);
225 226
         });
226 227
 
228
+    APP.members.addListener(MemberEvents.DTMF_SUPPORT_CHANGED,
229
+                            onDtmfSupportChanged);
227 230
 }
228 231
 
229 232
 
@@ -502,6 +505,16 @@ function onPasswordRequired(callback) {
502 505
         ':input:first'
503 506
     );
504 507
 }
508
+
509
+/**
510
+ * The dialpad button is shown iff there is at least one member that supports
511
+ * DTMF (e.g. jigasi).
512
+ */
513
+function onDtmfSupportChanged(dtmfSupport) {
514
+    //TODO: enable when the UI is ready
515
+    //Toolbar.showDialPadButton(dtmfSupport);
516
+}
517
+
505 518
 function onMucMemberJoined(jid, id, displayName) {
506 519
     messageHandler.notify(displayName,'notify.somebody',
507 520
         'connected',

+ 123
- 0
modules/members/MemberList.js 查看文件

@@ -0,0 +1,123 @@
1
+/* global APP */
2
+
3
+/**
4
+ * This module is meant to (eventually) contain and manage all information
5
+ * about members/participants of the conference, so that other modules don't
6
+ * have to do it on their own, and so that other modules can access members'
7
+ * information from a single place.
8
+ *
9
+ * Currently this module only manages information about the support of jingle
10
+ * DTMF of the members. Other fields, as well as accessor methods are meant to
11
+ * be added as needed.
12
+ */
13
+
14
+var XMPPEvents = require("../../service/xmpp/XMPPEvents");
15
+var Events = require("../../service/members/Events");
16
+var EventEmitter = require("events");
17
+
18
+var eventEmitter = new EventEmitter();
19
+
20
+/**
21
+ * The actual container.
22
+ */
23
+var members = {};
24
+
25
+/**
26
+ * There is at least one member that supports DTMF (i.e. is jigasi).
27
+ */
28
+var atLeastOneDtmf = false;
29
+
30
+
31
+function registerListeners() {
32
+    APP.xmpp.addListener(XMPPEvents.MUC_MEMBER_JOINED, onMucMemberJoined);
33
+    APP.xmpp.addListener(XMPPEvents.MUC_MEMBER_LEFT, onMucMemberLeft);
34
+}
35
+
36
+/**
37
+ * Handles a new member joining the MUC.
38
+ */
39
+function onMucMemberJoined(jid, id, displayName) {
40
+    var member = {
41
+        displayName: displayName
42
+    };
43
+
44
+    APP.xmpp.getConnection().disco.info(
45
+        jid, "" /* node */, function(iq) { onDiscoInfoReceived(jid, iq); });
46
+
47
+    members[jid] = member;
48
+}
49
+
50
+/**
51
+ * Handles a member leaving the MUC.
52
+ */
53
+function onMucMemberLeft(jid) {
54
+    delete members[jid];
55
+    updateAtLeastOneDtmf();
56
+}
57
+
58
+/**
59
+ * Handles the reception of a disco#info packet from a particular JID.
60
+ * @param jid the JID sending the packet.
61
+ * @param iq the packet.
62
+ */
63
+function onDiscoInfoReceived(jid, iq) {
64
+    if (!members[jid])
65
+        return;
66
+
67
+    var supportsDtmf
68
+        = $(iq).find('>query>feature[var="urn:xmpp:jingle:dtmf:0"]').length > 0;
69
+    updateDtmf(jid, supportsDtmf);
70
+}
71
+
72
+/**
73
+ * Updates the 'supportsDtmf' field for a member.
74
+ * @param jid the jid of the member.
75
+ * @param newValue the new value for the 'supportsDtmf' field.
76
+ */
77
+function updateDtmf(jid, newValue) {
78
+    var oldValue = members[jid].supportsDtmf;
79
+    members[jid].supportsDtmf = newValue;
80
+
81
+    if (newValue != oldValue) {
82
+        updateAtLeastOneDtmf();
83
+    }
84
+}
85
+
86
+/**
87
+ * Checks each member's 'supportsDtmf' field and updates
88
+ * 'atLastOneSupportsDtmf'.
89
+ */
90
+function updateAtLeastOneDtmf(){
91
+    var newAtLeastOneDtmf = false;
92
+    for (var key in members) {
93
+        if (typeof members[key].supportsDtmf !== 'undefined'
94
+            && members[key].supportsDtmf) {
95
+            newAtLeastOneDtmf= true;
96
+            break;
97
+        }
98
+    }
99
+
100
+    if (atLeastOneDtmf != newAtLeastOneDtmf) {
101
+        atLeastOneDtmf = newAtLeastOneDtmf;
102
+        eventEmitter.emit(Events.DTMF_SUPPORT_CHANGED, atLeastOneDtmf);
103
+    }
104
+}
105
+
106
+
107
+/**
108
+ * Exported interface.
109
+ */
110
+var Members = {
111
+    start: function(){
112
+        registerListeners();
113
+    },
114
+    addListener: function(type, listener)
115
+    {
116
+        eventEmitter.on(type, listener);
117
+    },
118
+    removeListener: function (type, listener) {
119
+        eventEmitter.removeListener(type, listener);
120
+    }
121
+};
122
+
123
+module.exports = Members;

+ 5
- 0
service/members/Events.js 查看文件

@@ -0,0 +1,5 @@
1
+var Events = {
2
+    DTMF_SUPPORT_CHANGED: "members.dtmf_support_changed"
3
+};
4
+
5
+module.exports = Events;

Loading…
取消
儲存