Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mohdrashid/socketchat

A node.js webscoket chat library with addon authentication functionality
https://github.com/mohdrashid/socketchat

frontend fullstack-javascript javascript nodejs socketchat websockets

Last synced: 8 days ago
JSON representation

A node.js webscoket chat library with addon authentication functionality

Awesome Lists containing this project

README

        

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](https://www.npmjs.com/package/websocket) to create websocket server.


## Message format
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.

Steps #1
--------
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'}

Steps #2
--------
Messaging also follows a certain format. Messages must be in the format
{type:'message',to:'username',message:'xyz'}


## Installation

```sh
npm install socketchat
```


## Server-side Example

```js
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

```

## Client-side Example

```js
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 = ""+str + "
"+new Date()+"

" + log.innerHTML;
}
```


## API

* new socketchat()
* socketchat.listen()

-------------------------------------------------------

### new socketchat(port,authenticationFunction)

The passed port number is used for listening and the passed authentication function is used to authenticate users.

-------------------------------------------------------

### socketchat.listen()

Starts listening on the port number passed in the constructor

-------------------------------------------------------


## Events

* listen
* authentication
* message
* error

-------------------------------------------------------

## listen

Emitted when starting to listen

-------------------------------------------------------

### authentication

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'}

-------------------------------------------------------

### message

Emitted whenever a user sends message.
Messages are in the format:
{type:'message',to:'username',message:'xyz'}

-------------------------------------------------------

### error

Emitted when error occurs.

-------------------------------------------------------


## License

MIT