function loadSession()

in docs-samples/v3Node/startNewDialog/botadapter.js [17:86]


function loadSession(address, opts, cb) {
  
  var _consts = {
    Data : {
      SessionState: 'BotBuilder.Data.SessionState'
    }
  };

  var _this = this;
  this.lookupUser(address, (user) => {
    _this.ensureConversation(address, function (address) {

      var storageCtx = {
        userId: user.id,
        conversationId: address.conversation ? address.conversation.id : null,
        address: address,
        persistUserData: _this.settings.persistUserData,
        persistConversationData: _this.settings.persistConversationData
      };

      var loadedData;
      _this.getStorageData(storageCtx, function (data) {
        if (!_this.localizer) {
          var defaultLocale = _this.settings.localizerSettings ? _this.settings.localizerSettings.defaultLocale : null;
          _this.localizer = new DefaultLocalizer_1.DefaultLocalizer(_this.lib, defaultLocale);
        }
        var session = new builder.Session({
          localizer: _this.localizer,
          autoBatchDelay: _this.settings.autoBatchDelay,
          library: _this.lib,
          actions: _this.actions,
          middleware: _this.mwSession,
          dialogId: opts.dialogId,
          dialogArgs: opts.dialogArgs,
          dialogErrorMessage: _this.settings.dialogErrorMessage,
          onSave: function (cb) {
            var finish = _this.errorLogger(cb);
            loadedData.userData = _clone(session.userData);
            loadedData.conversationData = _clone(session.conversationData);
            loadedData.privateConversationData = _clone(session.privateConversationData);
            loadedData.privateConversationData[_consts.Data.SessionState] = session.sessionState;
            _this.saveStorageData(storageCtx, loadedData, finish, finish);
          },
          onSend: function (messages, cb) {
            _this.send(messages, cb);
          }
        });
        session.on('error', function (err) { return _this.emitError(err); });
        var sessionState;
        session.userData = data.userData || {};
        session.conversationData = data.conversationData || {};
        session.privateConversationData = data.privateConversationData || {};
        if (session.privateConversationData.hasOwnProperty(_consts.Data.SessionState)) {
          sessionState = session.privateConversationData[_consts.Data.SessionState];
          delete session.privateConversationData[_consts.Data.SessionState];
        }

        // Do the important things route/dispatch would have done
        session.sessionState = sessionState;
        var cur = session.curDialog();
        session.dialogData = cur ? cur.state : {};
        session.message = {address : address};

        loadedData = data;
        cb(null, session);

      }, (err) => { _this.errorLogger(err); cb(err); })
    }, (err) => { _this.errorLogger(err); cb(err); })
  }, (err) => { _this.errorLogger(err); cb(err); })
}