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