From 0fb5af9067a86f84c74b1999fa425943925cf6b5 Mon Sep 17 00:00:00 2001 From: dongyado Date: Wed, 6 Jul 2016 00:29:19 +0800 Subject: [PATCH] update nodejs client --- binding/nodejs/ip2region.js | 74 ++++++++++++++++++++++++++----------- binding/nodejs/test.js | 8 ++-- 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/binding/nodejs/ip2region.js b/binding/nodejs/ip2region.js index de3e9db..4684f3e 100644 --- a/binding/nodejs/ip2region.js +++ b/binding/nodejs/ip2region.js @@ -6,29 +6,59 @@ * @author dongyado * */ -var fs = require('fs'); -var ip2r = {}; -ip2r.db_file = null; -ip2r.db_fd = null; - -exports.setDbFile = function(path) +function Ip2region(db_path) { - ip2r.db_file = path; - ip2r.db_fd = fs.open(ip2r.db_file); + var fs = require('fs'); + var ipbase = [16777216, 65536, 256, 1]; // for ip2long + var ip2r = {}; + ip2r.db_file_path = null; + ip2r.db_fd = null; + + // db file check + if (typeof(db_path) == "undefined" || fs.exists(db_path) ) { + throw("[ip2region] db file not exists : " + db_path); + } + + ip2r.db_file_path = db_path; + + try { + ip2r.db_fd = fs.openSync(ip2r.db_file_path, 'r'); + } catch(e) { + throw("[ip2region] Can not open ip2region.db file , path : " + ip2r.db_file_path); + } + + + this.binarySearch = function(ip) + { + var buffer = new Buffer(8); + fs.readSync(ip2r.db_fd, buffer, 0, 8, 0); + console.log(buffer[0]); + + + + return ip2long(ip); + } + + this.btreeSearch = function(ip) + { + return ip2long(ip); + } + + function ip2long(ip) + { + var val = 0; + ip.split('.').forEach(function(ele, i){ + val += ipbase[i] * ele; + }); + + return val; + } + + function getLong(buffer) + { + + } } -exports.getDbFile = function(path) -{ - return ip2r.db_file; -} - -exports.binarySearch = function(ip) -{ - return ip; -} - -exports.btreeSearch = function(ip) -{ - return ip; -} +module.exports = Ip2region; diff --git a/binding/nodejs/test.js b/binding/nodejs/test.js index 38db36e..7054c58 100644 --- a/binding/nodejs/test.js +++ b/binding/nodejs/test.js @@ -2,9 +2,7 @@ * test program * */ -var ip2r = require('./ip2region'); +var Ip2region = require('./ip2region'); +var ip2region = new Ip2region('../../data/ip2region.db'); -ip2r.setDbFile('./ip2region.db'); - -console.log(ip2r.getDbFile()); -console.log(ip2r.binarySearch("12321231")); +console.log(ip2region.binarySearch("114.114.114.114"));