Exemple #1
0
 connection.addHandler(safeCB(presenceEl => {
   const showEl = presenceEl.querySelector('show');
   let show = 'online';
   if (presenceEl.getAttribute('type') === 'unavailable') {
     show = 'offline';
   }
   else if (showEl) {
     show = showEl.textContent;
   }
   const statusEl = presenceEl.querySelector('status');
   const bareJID = Strophe.getBareJidFromJid(presenceEl.getAttribute('from'));
   const presence = {
     jid: presenceEl.getAttribute('from'),
     show,
     status: statusEl ? statusEl.textContent : undefined
   };
   if (this.state.presences.bareJID) {
     this.setState({ presences: update(this.state.presences, { 
       [bareJID]: { [presence.jid]: { $set: presence } }
     })});
   }
   else {
     this.setState({ presences: update(this.state.presences, { 
       [bareJID]: { $set: { [presence.jid]: presence } }
     })});
   }
   return true;
 }), null, 'presence', null, null, null); 
Exemple #2
0
  }
});

const App = React.createClass({
  getInitialState() {
    return {
      roster: undefined,
      showOffline: false,
      presence: {},
      status: "disconnected"
    };
  },

  handleConnect(jid, password) {
    this.setState({ status: "connecting", error: undefined, presences: {}, roster: undefined });
    const connection = this.connection = new Strophe.Connection(`https://${Strophe.getDomainFromJid(jid)}/http-bind`);
    // connection.rawInput = (data) => { console.log('RECV: ' + data); };
    // connection.rawOutput = (data) => { console.log('SEND: ' + data); };
    connection.connect(jid, password, safeCB(status => {
      if (status === Strophe.Status.CONNECTING) {
        this.setState({ status: "connecting" });
      }
      else if (status === Strophe.Status.CONNFAIL) {
        this.setState({
          status: "disconnected",
          error: "failed to connect"
        });
      }
      else if (status === Strophe.Status.DISCONNECTING) {
        this.setState({ status: "disconnecting" });
      }