/www/src/ChatClient.js
enyo.kind({
name: "ChatClient",
kind: "Control",
loggedIn: false,
components: [
{name: "mainPanels", kind: "Panels", arrangerKind: "CollapsingArranger", style: "height: 100%", components: [
{name: "picker", kind: "Picker", onConversationSwitched: "conversationSwitched"},
{name: "conversation", kind: "Conversation", classes: "panel-shadow"},
]},
{name: "loginDialog", kind: "LoginDialog", onTryLogin: "tryLogin"},
{kind: "Signals",
onStartLogin: "startLogin",
onStartLogout: "startLogout",
onMessageSent: "messageSent"}
],
create: function() {
this.inherited(arguments);
this.socketSetup();
},
socketSetup: function() {
this.socket = io.connect(location.protocol + '//' + location.host);
this.socket.on('login-successful', function(data) {
enyo.Signals.send('onLoginSuccessful', {
username: data.username
});
}.bind(this));
this.socket.on('login-failed', function() {
enyo.Signals.send('onLoginFailed');
}.bind(this));
this.socket.on('roster', function(data) {
this.$.picker.setRoster(data);
}.bind(this));
this.socket.on('message', function(data) {
enyo.Signals.send('onMessageReceived', data);
conversationStore.appendConversation(data.jid, data);
this.$.picker.updateConversationList();
}.bind(this));
this.socket.on('buddy', function(data) {
this.$.picker.setPresence(data);
}.bind(this));
this.socket.on('disconnect', function() {
enyo.Signals.send('onLogout');
console.log('logged out');
}.bind(this));
this.socket.on('error', function() {
socket.disconnect();
// Retry a bit later
setTimeout(this.socketSetup.bind(this), 1000);
}.bind(this));
},
startLogin: function(inSender, inEvent) {
this.$.loginDialog.reset();
this.$.loginDialog.show();
},
startLogout: function(inSender, inEvent) {
this.socket.emit('logout');
},
tryLogin: function(inSender, inEvent) {
console.log('attempting login');
this.socket.emit('login', this.$.loginDialog.getData());
},
messageSent: function(inSender, inEvent) {
this.socket.emit('send-message', inEvent);
conversationStore.appendConversation(inEvent.jid, inEvent);
this.$.picker.updateConversationList();
},
conversationSwitched: function(inSender, inEvent) {
this.$.conversation.setJid(inEvent.jid);
this.$.conversation.setName(inEvent.name);
if (enyo.Panels.isScreenNarrow()) {
this.$.mainPanels.setIndex(1);
}
}
});