diff --git a/compress.cc b/compress.cc index 5a72f33..8d56d81 100644 --- a/compress.cc +++ b/compress.cc @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -11,8 +11,9 @@ using namespace v8; using namespace node; -class Gzip : public EventEmitter { +class Gzip : public ObjectWrap { public: + static Persistent s_ct; static void Initialize (v8::Handle target) { @@ -20,12 +21,13 @@ class Gzip : public EventEmitter { Local t = FunctionTemplate::New(New); - t->Inherit(EventEmitter::constructor_template); - t->InstanceTemplate()->SetInternalFieldCount(1); + s_ct = Persistent::New(t); + s_ct->InstanceTemplate()->SetInternalFieldCount(1); + s_ct->SetClassName(String::NewSymbol("Gzip")); - NODE_SET_PROTOTYPE_METHOD(t, "init", GzipInit); - NODE_SET_PROTOTYPE_METHOD(t, "deflate", GzipDeflate); - NODE_SET_PROTOTYPE_METHOD(t, "end", GzipEnd); + NODE_SET_PROTOTYPE_METHOD(s_ct, "init", GzipInit); + NODE_SET_PROTOTYPE_METHOD(s_ct, "deflate", GzipDeflate); + NODE_SET_PROTOTYPE_METHOD(s_ct, "end", GzipEnd); target->Set(String::NewSymbol("Gzip"), t->GetFunction()); } @@ -195,7 +197,7 @@ class Gzip : public EventEmitter { } - Gzip () : EventEmitter () + Gzip () : ObjectWrap () { } @@ -209,8 +211,11 @@ class Gzip : public EventEmitter { }; -class Gunzip : public EventEmitter { +Persistent Gzip::s_ct; + +class Gunzip : public ObjectWrap { public: + static Persistent s_ct; static void Initialize (v8::Handle target) { @@ -218,12 +223,13 @@ class Gunzip : public EventEmitter { Local t = FunctionTemplate::New(New); - t->Inherit(EventEmitter::constructor_template); - t->InstanceTemplate()->SetInternalFieldCount(1); + s_ct = Persistent::New(t); + s_ct->InstanceTemplate()->SetInternalFieldCount(1); + s_ct->SetClassName(String::NewSymbol("Gunzip")); - NODE_SET_PROTOTYPE_METHOD(t, "init", GunzipInit); - NODE_SET_PROTOTYPE_METHOD(t, "inflate", GunzipInflate); - NODE_SET_PROTOTYPE_METHOD(t, "end", GunzipEnd); + NODE_SET_PROTOTYPE_METHOD(s_ct, "init", GunzipInit); + NODE_SET_PROTOTYPE_METHOD(s_ct, "inflate", GunzipInflate); + NODE_SET_PROTOTYPE_METHOD(s_ct, "end", GunzipEnd); target->Set(String::NewSymbol("Gunzip"), t->GetFunction()); } @@ -354,7 +360,7 @@ class Gunzip : public EventEmitter { return scope.Close(String::New("")); } - Gunzip () : EventEmitter () + Gunzip () : ObjectWrap () { } @@ -368,6 +374,8 @@ class Gunzip : public EventEmitter { }; +Persistent Gunzip::s_ct; + extern "C" void init (Handle target) { diff --git a/filetest.js b/filetest.js index 3284f3c..11a5122 100644 --- a/filetest.js +++ b/filetest.js @@ -1,14 +1,14 @@ var compress=require("./compress"); -var sys=require("sys"); -var posix=require("posix"); +var util=require("util"); +var fs=require("fs"); // Read in our test file -var data=posix.cat("filetest.js", encoding="binary").wait(); -sys.puts("Got : "+data.length); +var data = fs.readFileSync("filetest.js", "binary"); +util.puts("Got : "+data.length); // Set output file -var fd = posix.open("filetest.js.gz", process.O_WRONLY | process.O_TRUNC | process.O_CREAT, 0644).wait(); -sys.puts("Openned file"); +var fd = fs.openSync("filetest.js.gz", 'w', 0644); +util.puts("Openned file"); // Create gzip stream var gzip=new compress.Gzip; @@ -16,22 +16,22 @@ gzip.init(); // Pump data to be compressed gzdata=gzip.deflate(data, "binary"); // Do this as many times as required -sys.puts("Compressed size : "+gzdata.length); -posix.write(fd, gzdata, encoding="binary").wait(); +util.puts("Compressed size : "+gzdata.length); +var pos = fs.writeSync(fd, gzdata, 0, "binary"); // Get the last bit gzlast=gzip.end(); -sys.puts("Last bit : "+gzlast.length); -posix.write(fd, gzlast, encoding="binary").wait(); -posix.close(fd).wait(); -sys.puts("File closed"); +util.puts("Last bit : "+gzlast.length); +fs.writeSync(fd, gzlast, pos, "binary"); +fs.closeSync(fd); +util.puts("File closed"); // See if we can uncompress it ok var gunzip=new compress.Gunzip; gunzip.init(); -var testdata = posix.cat("filetest.js.gz", encoding="binary").wait(); -sys.puts("Test opened : "+testdata.length); -sys.puts(gunzip.inflate(testdata, "binary").length); +var testdata = fs.readFileSync("filetest.js.gz", "binary"); +util.puts("Test opened : "+testdata.length); +util.puts(gunzip.inflate(testdata, "binary").length); gunzip.end(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..7e10dbf --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "compress", + "description": "A streaming compression / gzip library for node.js", + "version": "0.1.9", + "author": "Rhys", + "repository": { + "type": "git", + "url": "http://github.com/waveto/node-compress.git" + }, + "scripts": { + "pre-install": "node-waf configure && node-waf" + }, + "engine": [ "node >=0.2.5" ], + "main": "./build/default/compress" +} diff --git a/test.js b/test.js index 2d380ce..96fa710 100644 --- a/test.js +++ b/test.js @@ -1,6 +1,6 @@ var compress=require("./compress"); -var sys=require("sys"); -var posix=require("posix"); +var util=require("util"); +var fs=require("fs"); // Create gzip stream var gzip=new compress.Gzip; @@ -8,17 +8,17 @@ gzip.init(); // Pump data to be compressed var gzdata1 = gzip.deflate("My data that needs ", "binary"); -sys.puts("Compressed size : "+gzdata1.length); +util.puts("Compressed size : "+gzdata1.length); var gzdata2 = gzip.deflate("to be compressed. 01234567890.", "binary"); -sys.puts("Compressed size : "+gzdata2.length); +util.puts("Compressed size : "+gzdata2.length); var gzdata3=gzip.end(); -sys.puts("Last bit : "+gzdata3.length); +util.puts("Last bit : "+gzdata3.length); // Take the output stream, and chop it up into two var gzdata = gzdata1+gzdata2+gzdata3; -sys.puts("Total compressed size : "+gzdata.length); +util.puts("Total compressed size : "+gzdata.length); var d1 = gzdata.substr(0, 25); var d2 = gzdata.substr(25); @@ -29,7 +29,7 @@ var data1 = gunzip.inflate(d1, "binary"); var data2 = gunzip.inflate(d2, "binary"); var data3 = gunzip.end(); -sys.puts(data1+data2+data3); +util.puts(data1+data2+data3); diff --git a/wscript b/wscript index f974b56..d6cf962 100644 --- a/wscript +++ b/wscript @@ -1,6 +1,9 @@ import Options +import os from os import unlink, symlink, popen -from os.path import exists +from os.path import exists +from os import mkdir +from os.path import abspath srcdir = "." blddir = "build" @@ -29,5 +32,7 @@ def shutdown(): if Options.commands['clean']: if exists('compress.node'): unlink('compress.node') else: - if exists('build/default/compress.node') and not exists('compress.node'): - symlink('build/default/compress.node', 'compress.node') + if not exists('build/default'): + mkdir('build/default') + if exists('build/Release/compress.node') and not exists('build/default/compress.node'): + symlink(os.getcwd()+'/build/Release/compress.node', 'build/default/compress.node')