thinknode
Version:
A fast, flexible and all-in-one web framework for node.js.
76 lines (72 loc) • 2.03 kB
JavaScript
/**
* Controller
* @return
*/
var usernames = {};
var numUsers = 0;
export default class extends THINK.controller('WebSocket') {
init(http){
super.init(http);
}
indexAction(){
//auto render template file index_index.html
return this.display();
}
openAction(){
var socket = this.http.socket;
this.broadcast('new message', {
username: socket.username,
message: this.http.data
});
}
adduserAction(){
var socket = this.http.socket;
var username = this.http.data;
// we store the username in the socket session for this client
socket.username = username;
// add the client's username to the global list
usernames[username] = username;
++numUsers;
this.emit('login', {
numUsers: numUsers
});
// echo globally (all clients) that a person has connected
this.broadcast('userjoin', {
username: socket.username,
numUsers: numUsers
});
}
closeAction(){
var socket = this.http.socket;
// remove the username from global usernames list
if (socket.username) {
delete usernames[socket.username];
--numUsers;
// echo globally that this client has left
this.broadcast('userleft', {
username: socket.username,
numUsers: numUsers
});
}
}
chatAction(){
var socket = this.http.socket;
// we tell the client to execute 'chat'
this.broadcast('chat', {
username: socket.username,
message: this.http.data
});
}
typingAction(){
var socket = this.http.socket;
this.broadcast('typing', {
username: socket.username
});
}
stoptypingAction(){
var socket = this.http.socket;
this.broadcast('stoptyping', {
username: socket.username
});
}
}