Skip to content

Instantly share code, notes, and snippets.

Created June 5, 2012 16:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/2876204 to your computer and use it in GitHub Desktop.
Save anonymous/2876204 to your computer and use it in GitHub Desktop.
node server.js firebird
// Load configuration for Firebird
var fbCfg = require("./fbConfig").cfg;
var fbCfgOuter = require("./fbConfig").cfgOuter;
var DEV_MODE = true;
function getCardHoldersData(uid) {
fbConnect();
if (fbConn.connected == true) {
var sql = "SELECT FID,...";
var obj = {};
var conn = getConn();
if(!conn.inTransaction)
conn.startTransactionSync();
var rs = conn.querySync(sql);
var rows = rs.fetchSync(1, true);
rows.forEach(function(row) {
obj = row;
});
// коммитим Транзакцию
conn.commitSync();
return obj;
} else {
return -1;
}
}
function getUserData(data) {
fbConnect();
if (fbConn.connected == true) {
var sql = "SELECT ID, ...";
if(!fbConn.inTransaction)
fbConn.startTransactionSync();
var rs = fbConn.querySync(sql);
var rows = rs.fetchSync(1, true);
var obj = {};
rows.forEach(function(row) {
console.log( 'Getting info for uid: ' + row.ID );
obj = row;
});
fbConn.commitSync();
return obj;
} else {
return -1;
}
}
function getChannelsForUser(data) {
var arr = new Array();
fbConnect();
if (fbConn.connected == true) {
var sql = "SELECT ...";
if(!fbConn.inTransaction)
fbConn.startTransactionSync();
var rs = fbConn.querySync(sql);
var rows = rs.fetchSync("all", true);
rows.forEach(function(row) {
//...
});
fbConn.commitSync();
return arr;
} else {
return arr;
}
}
// 3. Checking out for a new Events and notifying the i/o users
var fbGetAndPushEventsTimeout = 900; // каждую секунду будем проверять!!
// переменные конфига ФБ, для того чтобы подсоединятся к БД
var fbConn = null; //fb.createConnection();
var fbConnOuter = null; //fb.createConnection();
// Подключаемся к ФБ, если еще не подключились.
// Если УЖЕ подключились, то возвращаем объект коннекта.
function fbConnect() {
if (fbConn == null || fbConn.connected == false) {
console.log( "fbConn.connected == false" );
try {
fbConn = fb.createConnection();
fbConn.connectSync( fbCfg.db, fbCfg.user, fbCfg.password, fbCfg.role );
if (DEV_MODE) {
fbConnOuter = fb.createConnection();
fbConnOuter.connectSync( fbCfgOuter.db, fbCfgOuter.user, fbCfgOuter.password, fbCfgOuter.role );
}
} catch (err) {
console.log( "It was an error while connectSync:" + err.message );
console.dir(err);
return false;
}
} else {
//console.log( "fbConn.connected == true" );
//return fbConn;
}
}
// получаем ФБ конекшен в зависимости от режима
function getConn() {
var rs = null;
if (DEV_MODE) {
rs = fbConnOuter;
} else {
rs = fbConn;
}
return rs;
}
function fbGetLatestId() {
if (fbConn.connected == true) {
var sql = "SELECT ...";
var conn = getConn();
if(!conn.inTransaction)
conn.startTransactionSync();
var rs = conn.querySync(sql);
var rows = rs.fetchSync("all", true);
var num = -1;
rows.forEach(function(row) {
console.log( 'Latest Message ID: ' + row.MESSNUMBER );
num = row.MESSNUMBER;
});
conn.commitSync();
return num;
} else {
return -1;
}
}
function fbGetAndPushEvents() {
fbConnect();
if (fbConn.connected == false) {
console.log( "Sorry, I can't connect!" );
} else {
// может быть такое, что коннекта к этому времени не будет, тогда сработает catch!
try {
fbLatestId = fbGetLatestId();
if ( fbLatestId != -1 ) {
var sql = '';
try {
// получаем все айдишники объектов, симулярия получания каналов как будто мы админ
// TODO: Correct params list to select (optimization!)!!
sql = "SELECT ...";
var conn = getConn();
if(!conn.inTransaction)
conn.startTransactionSync();
var rs = conn.querySync(sql);
var rows = rs.fetchSync("all", true);
//pushing to channels!
rows.forEach(function(row) {
var chData = {};
console.log( "num = " + row.MESSNUMBER );
//console.dir(row);
if ( row.CODE == 300 || row.CODE == 301 ) {
// ...
} else {
if (row.FCARDHOLDERID != null && row.FCARDHOLDERID > 0) {
chData = getCardHoldersData(row.FCARDHOLDERID);
//...
}
}
});
if(conn.inTransaction) // если не делать эту проверку то при комите выдает ошибку чтото типа "cannot handle transaction..."
conn.commitSync();
} catch (err) {
console.log( "It was an error while querySync (fbGetAndPushEvents):" + err.message );
//console.dir(err);
}
} else {
console.log( "Error: can not get fbLatestId" );
}
} catch (err) {
console.log( "It was an error while querySync:" + err.message );
console.dir(err);
}
}
setTimeout(fbGetAndPushEvents, fbGetAndPushEventsTimeout);
}
// вызываем первый раз, последующие вызовы будут в самой этой функции
fbGetAndPushEvents();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment