Socketchat is a chat application library using websockets, written in JavaScript for node.js to ease building of chat application easy using websockets.
This library relies on WebSocket to create websocket server.
The client communicate with server using JSON format with some important fields. The server supports two operations as of now: authentication and messaging. Clients cannot exchange messages without authenticating themselves.
Authentication is used to register client's socket information in server, so that others can communicate using username of the user. Authentication Message must be in the format : {type:'authenticate',username:'xyz',password:'1234'}
Messaging also follows a certain format. Messages must be in the format {type:'message',to:'username',message:'xyz'}
npm install socketchat
var socketchatlib=require('./app.js');
//Sample users list
var users={
//"username":"password"
"rx":"r123",
"2":"1234",
"3":"12345"
};
//Sample Authentication function
var auth=function(username,password){
return (users[username]===password)
}
//Creating a object of the library.
//Passing portnumber and authentication function
var socketchat=new socketchatlib(1337,auth);
//Start listening in the specified port
socketchat.listen();
//Upon successfully listening this event will be fired
socketchat.on('listen',function(message){
console.log(message);
});
//Whenever a client tries authenticate, this event will be fired
socketchat.on('authentication',function(origin,stat){
console.log(origin+": "+JSON.stringify(stat));
});
//When users exchange message, this event is also fired
socketchat.on('message',function(message){
console.log("Message: "+JSON.stringify(message));
});
//Errors can be listener using this event listener
socketchat.on('error',function(err){
console.log("Error: "+err);
});
output:
Connected
listening on port 1337
var ws;
function init() {
ws = new WebSocket("ws://localhost:1337/");
// Set event handlers.
ws.onopen = function() {
output("Connection established");
};
ws.onmessage = function(e) {
// e.data contains received string.
var json=JSON.parse(e.data);
console.log(json);
if(json.type==='authentication'&&json.status==='success')
{
document.getElementById("login").style.display = "none";
document.getElementById("message").style.display = "block";
}
else if(json.type==='authentication'&&json.status==='fail'){
output("Login Failed");
}
else if(json.type==='message'){
output("Message from " + json.from+" : "+json.message);
}
};
ws.onclose = function() {
output("onclose");
};
ws.onerror = function() {
output("onerror");
};
}
function onSubmit() {
var input = document.getElementById("input");
var to = document.getElementById("to");
var data={type:'message'};
data.message=input.value;
data.to=to.value;
// You can send message to the Web Socket using ws.send.
if(input.value.length>0){
ws.send(JSON.stringify(data));
output("Send to "+to.value+" : "+input.value);
input.value = "";
input.focus();
}
}
function login() {
var username = document.getElementById("username");
var password = document.getElementById("password");
var data={type:'authenticate'};
data.username=username.value;
data.password=password.value;
ws.send(JSON.stringify(data));
}
function onCloseClick() {
ws.close();
}
function output(str) {
var log = document.getElementById("log");
log.innerHTML = "<strong>"+str + "</strong><br>"+new Date()+"<br><br>" + log.innerHTML;
}
The passed port number is used for listening and the passed authentication function is used to authenticate users.
Starts listening on the port number passed in the constructor
Emitted when starting to listen
Emitted whenever a user tries to authenticate. Emits origin of the connection and status of authentication. socketchat.on('authentication',function(origin,stat){ }); stat is a JSON in the format: {type:'authentication',status:'success'} if authentication is successful otherwise {type:'authentication',status:'fail'}
Emitted whenever a user sends message. Messages are in the format: {type:'message',to:'username',message:'xyz'}
Emitted when error occurs.
MIT