Monday, 27 February 2017

Real Time Chat With Node JS

Real Time Chat With Node JS

Create a /config.js file (For configuration like Database connection and port)
module.exports = {    
    'SERVERPORT': '8080',            
    'WEBADDRESS': 'http://localhost/',
    'LOG_LEVEL': 'INFO',
    'LOG_FILE_PATH': 'my_log.txt',
    
    
    // MySQL Information
    'MYSQL_HOST': 'localhost',
    'MYSQL_USER': 'root',
    'MYSQL_PASSWORD': '',
    'MYSQL_DB': 'enterprisedev2'
}


Create a /app.js file(Here all nodejs code for working the chat)
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
config = require('./config.js');
var mysql = require("mysql");     
request = require('request'),
 util = require('./util')        

app.get('/', function(req, res) {
    res.sendFile(__dirname + '/chat.html');
});

// Log any uncaught exceptions
process.on('uncaughtException', function (exception) {
        console.log(exception); // to see your exception details in the console
        fs.appendFile(config['LOG_FILE_PATH'], exception, null);
});


/* Make DB Connection */
var con = mysql.createConnection({
        host     : config['MYSQL_HOST'],
        user     : config['MYSQL_USER'],
        password : config['MYSQL_PASSWORD'],
        database : config['MYSQL_DB']
}); 

//Check the DB Connection status
con.connect(function(err) {
    if (err) {
        console.log('Error connecting to Db');
        return;
    }
});

  
 

io.on('connection', function(socket) {    
    socket.on('chat message', function(msg) {        
        /** Insert into database **/        
        request(config['WEBADDRESS'] + "ajax/add-chat-message/user_id/" + socket.uid + "/tour_id/" + socket.vid+"/text/"+msg, function(err, res, body) {          
          
          io.sockets["in"](socket.room).emit('chat message', msg,socket.username,socket.vid );
      });            
         
    }); 

    socket.on('new user', function(message, callback) {
        //console.log('New User -' + message);
    });

    socket.on('disconnect', function(message) {
        console.log('user disconnected');
    });

    var usernames = {};
    socket.on('adduser', function(username,vid,uid) {
        console.log(uid);
        var roomName='room_'+vid;
        // store the username in the socket session for this client
        socket.username = username;
        socket.vid = vid;
        //user id
        socket.uid = uid;
        // store the room name in the socket session for this client
        socket.room = roomName;
        // add the client's username to the global list
        usernames[username] = username;
        
         socket.join(roomName);
         //socket.emit('chat message',' You have connected to room1','ChatBot'); //to same window
         socket.broadcast.to(roomName).emit('chat message', username + ' has connected to this room','ChatBot'); //For other windows OR console.
    });
    
    socket.on('updateDetails',function(data){
        console.log(data);
    });

});


http.listen(config['SERVERPORT'], function() {
    console.log('listening on *:'+config['SERVERPORT']);
});



Create chat.html (Here all HTML code where chat will dispaly)

    <ul id="messages"></ul>
<form action="">
<input autocomplete="off" id="m" /><button>Send</button>
        </form>
<script src="//cdn.socket.io/socket.io-1.2.0.js"></script>        
        <script src="//code.jquery.com/jquery-1.11.1.js"></script>
        [style]
            * { margin: 0; padding: 0; box-sizing: border-box; }
            body { font: 13px Helvetica, Arial; }
            form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
            form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
            form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
            #messages { list-style-type: none; margin: 0; padding: 0; }
            #messages li { padding: 5px 10px; }
            #messages li:nth-child(odd) { background: #eee; }
        [/style]
        [script]     
        var getUrlParameter = function getUrlParameter(sParam) {
            var sPageURL = decodeURIComponent(window.location.search.substring(1)),
                sURLVariables = sPageURL.split('&amp;'),
                sParameterName,
                i;

            for (i = 0; i &lt; sURLVariables.length; i++) {
                sParameterName = sURLVariables[i].split('=');

                if (sParameterName[0] === sParam) {
                    return sParameterName[1] === undefined ? true : sParameterName[1];
                }
            }
        };

            var vid=getUrlParameter('vid');
            var userId=getUrlParameter('uid');
            
            //var socket = io();
            var socket = io.connect('http://localhost:8080'); 
            //socket.emit('adduser', prompt("What's your name?"),vid);
            socket.emit('adduser', 'Username',vid,userId);                        
            //socket.emit('updateDetails', "{name:'arun',address:'Mohali phase 7'}");
            
            $('form').submit(function(req) {
                console.log('posted');
                socket.emit('chat message', $('#m').val());
                $('#m').val('');
                return false;
            });



            socket.on('chat message', function(msg, username) {                    
                $('#messages').append($('
<li>').html('<b>' + username + '</b><i>('+new Date(new Date().getTime()).toLocaleString()+')</i>: ' + msg));

            });
            

            $.get("/ajax/chat?vid="+vid, function(data) {
                    data = JSON.parse(data);
                  //console.log(typeof data);
                $.each(data, function( index, value ) {
                    console.log(value)
                    $('#messages').append($('</li>
<li>').html('<b>' + value.display_name + '</b><i>('+value.dateTime+')</i>: ' + value.text));
                });
                
            });
            /** List default records **/
            </li>

        [/script]



Question: How to RUN?
Open /chat.html in browser



Question: Now install the required module in node.js?
Go to the folder where app.js is exist. Execute following command
npm install express
npm install mysql
npm install log4js
npm install request

Question: Do i need to install socket.io?
Yes, IF not installed please install.

Helpful link to install socket.
http://stackoverflow.com/questions/18990494/how-to-install-node-js-npm-socket-io-and-use-them

Question: How to run node?
node app.js



Monday, 20 February 2017

Rational Unified Process (RUP) methodology

Rational Unified Process (RUP) methodology

Question: What is RUP methodology?
RUP is a software development process from Rational, a division of IBM.


It divides the development process into four distinct phases that each involve business modeling, analysis and design, implementation, testing, and deployment. Question: What are four phases in RUP?
  1. Inception
  2. Elaboration
  3. Construction
  4. Transition
Question: What is Inception?
In this, development team determine if the project is worth pursuing? and what resources will be needed?.


Question: What is Elaboration?
Evaluation of The projects architecture and required resources.
Developers consider possible applications of the software and costs associated with the development.


Question: What is Construction?
The project is developed and completed.
The software is designed, written, and tested.


Question: What is Transition?
The software is released to the public. Final adjustments or updates are made based on feedback from end users