Created
June 5, 2012 16:52
-
-
Save anonymous/2876204 to your computer and use it in GitHub Desktop.
node server.js firebird
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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