complete redesign: use nodejs on server instead of php - documentation to be updated
This commit is contained in:
		
							
								
								
									
										93
									
								
								nodejs/sockets/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								nodejs/sockets/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
module.exports = function(sql) {
 | 
			
		||||
 | 
			
		||||
    var module={};
 | 
			
		||||
 | 
			
		||||
    module.connection = function(socket) {
 | 
			
		||||
 | 
			
		||||
        console.log("new client");
 | 
			
		||||
 | 
			
		||||
        function emit(signal, data) {
 | 
			
		||||
            console.log("<- signal: "+signal);
 | 
			
		||||
            socket.emit(signal, data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function broadcast(signal, data) {
 | 
			
		||||
            console.log("<= signal: "+signal);
 | 
			
		||||
            socket.broadcast.emit(signal, data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        socket.on("message", function(msg) {
 | 
			
		||||
            console.log("-> signal: message");
 | 
			
		||||
            if (!msg || !msg.user || !msg.content) return emit("fail", "wrong message format");
 | 
			
		||||
            sql.query("select pubkey from user where name = ?", [msg.user],
 | 
			
		||||
                      function(err, res, flds) {
 | 
			
		||||
                          if (err || !res || !res.length) return emit("fail", "unknown sender");
 | 
			
		||||
                          sql.query("insert into message set ?", {user: msg.user, msg: msg.content},
 | 
			
		||||
                                    function(err, result) {
 | 
			
		||||
                                        if (err) return emit("fail", "cannot store message");
 | 
			
		||||
                                        sql.query("select * from message, user"+
 | 
			
		||||
                                                  " where message.id = ? and"+
 | 
			
		||||
                                                  " message.user = user.name",
 | 
			
		||||
                                                  [result.insertId],
 | 
			
		||||
                                                  function(err, res, flds) {
 | 
			
		||||
                                                      broadcast('message', res[0]);
 | 
			
		||||
                                                      emit('message', res[0]);
 | 
			
		||||
                                                  });
 | 
			
		||||
                                    });
 | 
			
		||||
                      });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        socket.on("messages", function(msg) {
 | 
			
		||||
            console.log("-> signal: messages");
 | 
			
		||||
            sql.query("select * from message, user where message.user = user.name", [],
 | 
			
		||||
                      function(err, res, flds) {
 | 
			
		||||
                          emit('messages', res);
 | 
			
		||||
                      });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        socket.on("login", function(user) {
 | 
			
		||||
            if (!user.name || !user.pubkey) return emit("fail", "wrong login format");
 | 
			
		||||
            console.log("-> signal: login("+user.name+")");
 | 
			
		||||
            if (user.name=="safechat") return emit("fail", "user name safechat is reserved");
 | 
			
		||||
            sql.query("select name, pubkey from user where name = ?", [user.name],
 | 
			
		||||
                      function(err, res, flds) {
 | 
			
		||||
                          if (err) return emit('fail', "login failed");
 | 
			
		||||
                          if (!res || res.length==0) {
 | 
			
		||||
                              sql.query("insert into user (name, pubkey) values (?,?)",
 | 
			
		||||
                                        [user.name, user.pubkey], function(err, res, flds) {
 | 
			
		||||
                                            if (err) return emit('fail', "login failed");
 | 
			
		||||
                                            broadcast("user", {
 | 
			
		||||
                                                name: user.name, exists: false, pubkey: user.pubkey
 | 
			
		||||
                                            });
 | 
			
		||||
                                            emit('login');
 | 
			
		||||
                                        });
 | 
			
		||||
                          } else {
 | 
			
		||||
                              if (res[0].pubkey==user.pubkey) return emit('login');
 | 
			
		||||
                              emit('fail', "login failed");
 | 
			
		||||
                          }
 | 
			
		||||
                      });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        socket.on("user", function(name) {
 | 
			
		||||
            console.log("-> signal: user("+name+")");
 | 
			
		||||
            var result = {name: name, exists: false, pubkey: null};
 | 
			
		||||
            sql.query("select pubkey from user where name = ?", [name], function(err, res, flds) {
 | 
			
		||||
                if (!err && res && res.length) {
 | 
			
		||||
                    result.exists = true;
 | 
			
		||||
                    result.pubkey = res[0].pubkey;
 | 
			
		||||
                }
 | 
			
		||||
                emit('user', result);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
        
 | 
			
		||||
        socket.on("users", function(name) {
 | 
			
		||||
            console.log("-> signal: users");
 | 
			
		||||
            sql.query("select name, pubkey from user", [name], function(err, res, flds) {
 | 
			
		||||
                if (!err && res && res.length) emit('users', res);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
        
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    return module;
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user