Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var mysql = require('mysql');
  2.  
  3. var serverDB = (function(connectionData, callback) {
  4.     var queries = {
  5.         markRead    : "UPDATE messages SET readable = TRUE WHERE message_id = ?",
  6.         getHistory  : "SELECT * FROM messages WHERE (date_time >= ?) AND ((from_login = ? AND to_login = ?) OR (from_login = ? AND to_login = ?) ) ORDER BY date_time",
  7.         getUG       : "SELECT * FROM users; SELECT * FROM groups",
  8.         login       : "SELECT 1 FROM users WHERE login = ? AND password = ?",
  9.         userExists  : "SELECT 1 FROM users WHERE login = ?",
  10.         insertMess  : "INSERT INTO messages SET ?",
  11.     };
  12.  
  13.     var connData = connectionData;
  14.     connData.multipleStatements = true;
  15.    
  16.     var mysqlConnection = mysql.createConnection (connectionData);
  17.     mysqlConnection.connect ( function (error) {
  18.         if (error)
  19.             throw error;
  20.         console.log ('Successfully connected to MySQL server.');
  21.        
  22.         if (callback)
  23.             callback(this);
  24.     });
  25.    
  26.    
  27.     function _messageSetRead(id, callback) {
  28.         var query = util.format (queries.markRead, id);
  29.         mysqlConnection.query (query, function (err) {
  30.             if (err)
  31.                 throw err;
  32.             if (callback)
  33.                 callback();
  34.         });
  35.     }
  36.    
  37.     function _getHistory (loginFrom, loginTo, dateAfter, callback) {
  38.         mysqlConnection.query (
  39.                 queries.getHistory,
  40.                 [dateAfter, loginFrom, loginTo, loginTo, loginFrom],
  41.                 function (err, rows) {
  42.                     if (err)
  43.                         throw err;
  44.                     if (callback)
  45.                         callback (rows);
  46.                 }
  47.         );
  48.     }
  49.    
  50.     function _getUG(callback) {
  51.         mysqlConnection.query (queries.getUG, function (err, result) {
  52.             if (err)
  53.                 throw err;
  54.             if (callback)
  55.                 callback (result[0], result[1]);
  56.         });
  57.     }
  58.    
  59.     function _checkUser(login, password, callback){
  60.         mysqlConnection.query (queries.login, [login, password], function (err, result) {
  61.             if (err)
  62.                 throw err;
  63.             if (callback)
  64.                 callback (result.length !== 0);
  65.         });
  66.     }
  67.    
  68.     function _insertMessage (from, to, message, time, callback){
  69.         var insertSet = {
  70.             'from_login' : from,
  71.             'to_login' : to,
  72.             'message' : message,
  73.             'date_time' : time
  74.         }; 
  75.        
  76.         mysqlConnection.query (queries.insertMess, insertSet, function (err, result) {
  77.             if (err)
  78.                 throw err;
  79.             if (callback)
  80.                 callback (result.id);
  81.         });
  82.     }
  83.    
  84.     function _userExists (login, callback){
  85.         mysqlConnection.query (queries.userExists, login, function (err, result) {
  86.             if(err)
  87.                 throw err;
  88.             if (callback)
  89.                 callback (result.length !== 0);
  90.         });
  91.     }
  92.    
  93.     return {
  94.         messageSetRead : _messageSetRead,
  95.         getHistory : _getHistory,
  96.         getUG : _getUG,
  97.         checkUser : _checkUser,
  98.         insertMessage : _insertMessage,
  99.         userExists : _userExists,
  100.     };
  101.    
  102.     // ADMIN FUNCTIONS 
  103. })({
  104.      host     : '178.62.178.14',
  105.      user     : 'root',
  106.      password : 'databasepassword',
  107.      database : 'corporative_messenger'
  108. });
  109.  
  110.  
  111. function ChatClient (clientSocket, server) {
  112.     this.server = server;
  113.     this.websocket = clientSocket;
  114.     this.authorized = false;
  115.     this.authorizedAdmin = false;
  116.     this.websocket.on ('message', this.onMessage);
  117.     this.websocket.on ('close', this.onClose);
  118.     this.websocket.on ('error', this.onError);
  119. }
  120.  
  121. ChatClient.prototype.onClose = function (){
  122.     server.disconnect (this);
  123. }
  124.  
  125. ChatClient.prototype.onError = function() {
  126.  
  127. }
  128.  
  129. ChatClient.prototype.onMessage = function(message) {
  130.     try {
  131.         var messageData = JSON.parse(message);
  132.  
  133.         if (this.authorizedAdmin){
  134.             switch (message.type) {
  135.                 case 'AdminAddUser': break;
  136.                 case 'AdminAddGroup': this.historyRequest (message.to, message.date_time); break;
  137.                 case 'AdminDeleteUser': this.messageRead (message.id); break;
  138.                 case 'AdminDeleteGroup': this.getUsersGroups (); break;
  139.  
  140.                 default: console.log ('Unknown event ' + message.type + 'from ' + this.login);
  141.             }
  142.         }
  143.         else if (this.authorized){
  144.             switch (message.type) {
  145.                 case 'SendMessageRequest': this.sendMessage (message.to, message.message); break;
  146.                 case 'HistoryRequest': this.historyRequest (message.to, message.date_time); break;
  147.                 case 'MessageAlreadyReadable': this.messageRead (message.id); break;
  148.                 case 'GetUsersGroups': this.getUsersGroups (); break;
  149.  
  150.                 default: console.log ('Unknown event ' + message.type + 'from ' + this.login);
  151.             }
  152.         }else {
  153.             switch (messageData.type) {
  154.                     case 'AuthorizeRequest' : this.obtainSession (message.login, message.password); break;
  155.                     case 'ConfirmSession': this.confirmSession (this.login, message.session_id); break;
  156.                    
  157.                     default: console.log ('Unknown event ' + message.type + 'from ' + this.login);
  158.             }
  159.         }
  160.     } catch (e) {
  161.         console.log ('Bad message from ' + this.login);
  162.     }
  163. };
  164.  
  165.  
  166. ChatClient.prototype.adminAddUser = function (user, callback){
  167.     server.addUser (user, function(answer) {
  168.         this.sendData (answer, callback);
  169.     });
  170. }
  171.  
  172. ChatClient.prototype.adminDeleteUser = function (user, callback){
  173.     server.deleteUser (user, function(answer) {
  174.         this.sendData (answer, callback);
  175.     });
  176. }
  177.  
  178. ChatClient.prototype.adminAddGroup = function (group, callback) {
  179.     server.addGroup (group, function(answer) {
  180.         this.sendData (answer, callback);
  181.     });
  182. }
  183.  
  184. ChatClient.prototype.adminDeleteGroup = function (group, callback) {
  185.     server.deleteGroup (group, function(answer) {
  186.         this.sendData (answer, callback);
  187.     });
  188. }
  189.  
  190. ChatClient.prototype.successAuth = function (callback){
  191.     server.successAuth (this, callback);
  192. }
  193.  
  194. ChatClient.prototype.getUsersGroups = function (callback){
  195.     serverDB.getUG (function(users, groups){
  196.         this.sendData ({
  197.             type : 'UsersGroups',
  198.             allUsers: users,
  199.             groupName: groups
  200.         }, callback);
  201.     });
  202. }
  203. ChatClient.prototype.sendData = function (data, callback){
  204.     if (this.websocket)
  205.         this.websocket.send (JSON.stringify (data), function (error) {
  206.             if (error)
  207.                 throw error;
  208.             if (callback)
  209.                 callback();
  210.         });
  211. }
  212.  
  213. ChatClient.prototype.authorize = function (login, password, callback){    
  214.     serverDB.checkUser (login, password, function (authorized){
  215.         if (authorized){
  216.             this.login = login;
  217.             this.authorized = true;
  218.             if (login == 'admin')
  219.                 this.authorizedAdmin = authorized;
  220.  
  221.             this.sendData ({
  222.                 type: 'AuthorizeRequestAnswer',
  223.                 answer: 'SuccessAuthorization'
  224.             }, function () {
  225.                 this.successAuth (callback);
  226.             })
  227.         } else {
  228.             this.sendData ({
  229.                 type: 'AuthorizeRequestAnswer',
  230.                 answer: 'WrongLoginOrPassword'
  231.             }, callback);
  232.         }
  233.     });
  234. }
  235.  
  236.  
  237. ChatClient.prototype.sessionExpired = function (callback) {
  238.     this.sendData ({
  239.         type: 'AdminYouHasBeenDeleted'
  240.     }, function () {
  241.         this.websocket.close();
  242.         if (callback)
  243.             callback();
  244.     });
  245.  
  246. }
  247.  
  248. ChatClient.prototype.sendMessage = function (to, message, callback) {
  249.     var currentTime = new Date();
  250.     serverDB.insertMessage (this.login, to, message, currentTime, function (id) {
  251.         var messageData = {
  252.             type: 'RenderMessageRequest',
  253.             id:         id,
  254.             from:       this.login,
  255.             to:         to,
  256.             message:    message,
  257.             date_time:  currentTime,
  258.             readable:   false
  259.         };
  260.  
  261.         server.sendTo(this.login, messageData, function (){
  262.             server.sendTo (msg.to, messageData, callback);
  263.         });
  264.     });
  265. }
  266.  
  267. ChatClient.prototype.historyRequest = function (loginTo, dateAfter, callback) {
  268.     serverDB.getHistory (this.login, loginTo, dateAfter, function (history){
  269.         this.sendData ({
  270.             type: 'HistoryRequestAnswer',
  271.             answer: history
  272.         }, callback);
  273.     });
  274. }
  275.  
  276. ChatClient.prototype.messageRead = function (id, callback) {
  277.     serverDB.messageSetRead (id, callback);
  278. }
  279.  
  280. ChatClient.prototype.userOnlineStatus = function (user, ustate, callback){
  281.     this.sendData ({
  282.         type: 'OnlineOfflineStateRequest',
  283.         login: user,
  284.         state: ustate
  285.     }, callback);
  286. }
  287.  
  288. ChatClient.prototype.addUser = function (userd, callback){
  289.     this.sendData ({
  290.         type: 'AdminAddUserAnswer',
  291.         user: userd,
  292.         answer: 'UserHasBeenAdded'
  293.     }, callback);
  294. }
  295.  
  296. ChatClient.prototype.deleteUser = function (logind, callback){
  297.     if (logind == this.login)
  298.         this.sessionExpired (callback);
  299.     else {
  300.         this.sendData ({
  301.             type: 'AdminUserHasBeenDeleted',
  302.             login: logind
  303.         }, callback);
  304.     }
  305. }
  306.  
  307. ChatClient.prototype.addGroup = function (group_name, callback) {  
  308. }
  309.  
  310. ChatClient.prototype.deleteGroup = function (group_id, callback) {  
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement