You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

JitsiConnection.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. const JitsiConference = require('./JitsiConference');
  2. import * as JitsiConnectionEvents from './JitsiConnectionEvents';
  3. import XMPP from './modules/xmpp/xmpp';
  4. const Statistics = require('./modules/statistics/statistics');
  5. /**
  6. * Creates new connection object for the Jitsi Meet server side video conferencing service. Provides access to the
  7. * JitsiConference interface.
  8. * @param appID identification for the provider of Jitsi Meet video conferencing services.
  9. * @param token the JWT token used to authenticate with the server(optional)
  10. * @param options Object with properties / settings related to connection with the server.
  11. * @constructor
  12. */
  13. function JitsiConnection(appID, token, options) {
  14. this.appID = appID;
  15. this.token = token;
  16. this.options = options;
  17. this.xmpp = new XMPP(options, token);
  18. this.addEventListener(JitsiConnectionEvents.CONNECTION_FAILED,
  19. (errType, msg) => {
  20. // sends analytics and callstats event
  21. Statistics.sendEventToAll(`connection.failed.${errType}`,
  22. { label: msg });
  23. });
  24. this.addEventListener(JitsiConnectionEvents.CONNECTION_DISCONNECTED,
  25. msg => {
  26. // we can see disconnects from normal tab closing of the browser
  27. // and then there are no msgs, but we want to log only disconnects
  28. // when there is real error
  29. if (msg) {
  30. Statistics.analytics.sendEvent(
  31. `connection.disconnected.${msg}`);
  32. }
  33. Statistics.sendLog(
  34. JSON.stringify({ id: 'connection.disconnected',
  35. msg }));
  36. });
  37. }
  38. /**
  39. * Connect the client with the server.
  40. * @param options {object} connecting options
  41. * (for example authentications parameters).
  42. */
  43. JitsiConnection.prototype.connect = function(options) {
  44. if (!options) {
  45. options = {};
  46. }
  47. this.xmpp.connect(options.id, options.password);
  48. };
  49. /**
  50. * Attach to existing connection. Can be used for optimizations. For example:
  51. * if the connection is created on the server we can attach to it and start
  52. * using it.
  53. *
  54. * @param options {object} connecting options - rid, sid and jid.
  55. */
  56. JitsiConnection.prototype.attach = function(options) {
  57. this.xmpp.attach(options);
  58. };
  59. /**
  60. * Disconnect the client from the server.
  61. */
  62. JitsiConnection.prototype.disconnect = function(...args) {
  63. // XXX Forward any arguments passed to JitsiConnection.disconnect to
  64. // XMPP.disconnect. For example, the caller of JitsiConnection.disconnect
  65. // may optionally pass the event which triggered the disconnect in order to
  66. // provide the implementation with finer-grained context.
  67. this.xmpp.disconnect(...args);
  68. };
  69. /**
  70. * This method allows renewal of the tokens if they are expiring.
  71. * @param token the new token.
  72. */
  73. JitsiConnection.prototype.setToken = function(token) {
  74. this.token = token;
  75. };
  76. /**
  77. * Creates and joins new conference.
  78. * @param name the name of the conference; if null - a generated name will be
  79. * provided from the api
  80. * @param options Object with properties / settings related to the conference
  81. * that will be created.
  82. * @returns {JitsiConference} returns the new conference object.
  83. */
  84. JitsiConnection.prototype.initJitsiConference = function(name, options) {
  85. return new JitsiConference({ name,
  86. config: options,
  87. connection: this });
  88. };
  89. /**
  90. * Subscribes the passed listener to the event.
  91. * @param event {JitsiConnectionEvents} the connection event.
  92. * @param listener {Function} the function that will receive the event
  93. */
  94. JitsiConnection.prototype.addEventListener = function(event, listener) {
  95. this.xmpp.addListener(event, listener);
  96. };
  97. /**
  98. * Unsubscribes the passed handler.
  99. * @param event {JitsiConnectionEvents} the connection event.
  100. * @param listener {Function} the function that will receive the event
  101. */
  102. JitsiConnection.prototype.removeEventListener = function(event, listener) {
  103. this.xmpp.removeListener(event, listener);
  104. };
  105. /**
  106. * Returns measured connectionTimes.
  107. */
  108. JitsiConnection.prototype.getConnectionTimes = function() {
  109. return this.xmpp.connectionTimes;
  110. };
  111. /**
  112. * Adds new feature to the list of supported features for the local
  113. * participant.
  114. * @param {String} feature the name of the feature.
  115. * @param {boolean} submit if true - the new list of features will be
  116. * immediately submitted to the others.
  117. */
  118. JitsiConnection.prototype.addFeature = function(feature, submit = false) {
  119. return this.xmpp.caps.addFeature(feature, submit);
  120. };
  121. /**
  122. * Removes a feature from the list of supported features for the local
  123. * participant
  124. * @param {String} feature the name of the feature.
  125. * @param {boolean} submit if true - the new list of features will be
  126. * immediately submitted to the others.
  127. */
  128. JitsiConnection.prototype.removeFeature = function(feature, submit = false) {
  129. return this.xmpp.caps.removeFeature(feature, submit);
  130. };
  131. module.exports = JitsiConnection;