Skip to content

Commit e6720f9

Browse files
DanDev33Kaiqb
authored andcommitted
adds v3Node/startNewDialog/botadapter.js file (#65)
1 parent a404504 commit e6720f9

1 file changed

Lines changed: 122 additions & 0 deletions

File tree

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
'user strict';
2+
3+
var builder = require('botbuilder');
4+
5+
function _clone(obj) {
6+
var cpy = {};
7+
if (obj) {
8+
for (var key in obj) {
9+
if (obj.hasOwnProperty(key)) {
10+
cpy[key] = obj[key];
11+
}
12+
}
13+
}
14+
return cpy;
15+
}
16+
17+
function loadSession(address, opts, cb) {
18+
19+
var _consts = {
20+
Data : {
21+
SessionState: 'BotBuilder.Data.SessionState'
22+
}
23+
};
24+
25+
var _this = this;
26+
this.lookupUser(address, (user) => {
27+
_this.ensureConversation(address, function (address) {
28+
29+
var storageCtx = {
30+
userId: user.id,
31+
conversationId: address.conversation ? address.conversation.id : null,
32+
address: address,
33+
persistUserData: _this.settings.persistUserData,
34+
persistConversationData: _this.settings.persistConversationData
35+
};
36+
37+
var loadedData;
38+
_this.getStorageData(storageCtx, function (data) {
39+
if (!_this.localizer) {
40+
var defaultLocale = _this.settings.localizerSettings ? _this.settings.localizerSettings.defaultLocale : null;
41+
_this.localizer = new DefaultLocalizer_1.DefaultLocalizer(_this.lib, defaultLocale);
42+
}
43+
var session = new builder.Session({
44+
localizer: _this.localizer,
45+
autoBatchDelay: _this.settings.autoBatchDelay,
46+
library: _this.lib,
47+
actions: _this.actions,
48+
middleware: _this.mwSession,
49+
dialogId: opts.dialogId,
50+
dialogArgs: opts.dialogArgs,
51+
dialogErrorMessage: _this.settings.dialogErrorMessage,
52+
onSave: function (cb) {
53+
var finish = _this.errorLogger(cb);
54+
loadedData.userData = _clone(session.userData);
55+
loadedData.conversationData = _clone(session.conversationData);
56+
loadedData.privateConversationData = _clone(session.privateConversationData);
57+
loadedData.privateConversationData[_consts.Data.SessionState] = session.sessionState;
58+
_this.saveStorageData(storageCtx, loadedData, finish, finish);
59+
},
60+
onSend: function (messages, cb) {
61+
_this.send(messages, cb);
62+
}
63+
});
64+
session.on('error', function (err) { return _this.emitError(err); });
65+
var sessionState;
66+
session.userData = data.userData || {};
67+
session.conversationData = data.conversationData || {};
68+
session.privateConversationData = data.privateConversationData || {};
69+
if (session.privateConversationData.hasOwnProperty(_consts.Data.SessionState)) {
70+
sessionState = session.privateConversationData[_consts.Data.SessionState];
71+
delete session.privateConversationData[_consts.Data.SessionState];
72+
}
73+
74+
// Do the important things route/dispatch would have done
75+
session.sessionState = sessionState;
76+
var cur = session.curDialog();
77+
session.dialogData = cur ? cur.state : {};
78+
session.message = {address : address};
79+
80+
loadedData = data;
81+
cb(null, session);
82+
83+
}, (err) => { _this.errorLogger(err); cb(err); })
84+
}, (err) => { _this.errorLogger(err); cb(err); })
85+
}, (err) => { _this.errorLogger(err); cb(err); })
86+
}
87+
88+
function beginDialog(address, dialogId, dialogArgs, opts, done) {
89+
if (typeof opts === 'function') {
90+
done = opts;
91+
opts = {};
92+
}
93+
94+
if (opts.resume) {
95+
this.loadSession(address, { dialogId:dialogId, dialogArgs:dialogArgs },
96+
(err, session) => {
97+
if (!err) {
98+
session.beginDialog(dialogId, dialogArgs);
99+
if (done) {
100+
done(null);
101+
}
102+
}
103+
else {
104+
if (done) {
105+
done(err);
106+
}
107+
}
108+
});
109+
}
110+
else {
111+
this.beginDialog(address, dialogId, dialogArgs, done);
112+
}
113+
}
114+
115+
function patch(bot) {
116+
bot.beginDialog = beginDialog;
117+
bot.loadSession = loadSession;
118+
return bot;
119+
}
120+
121+
exports.patch = patch;
122+

0 commit comments

Comments
 (0)