Files
safechat/nodejs/sockets/index.js

94 lines
4.2 KiB
JavaScript

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