From 160cef4b321edbc9a1e749f198a7acad0ec238b9 Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Wed, 20 Jun 2012 18:56:05 -0400 Subject: [PATCH] initial skeleton, right now it is just an empty c++ node shell --- .gitignore | 6 +++++- lib/index.js | 1 + package.json | 19 +++++++++++++++++++ src/consumer.cc | 39 +++++++++++++++++++++++++++++++++++++++ src/consumer.h | 20 ++++++++++++++++++++ src/franz.cc | 29 +++++++++++++++++++++++++++++ src/producer.cc | 39 +++++++++++++++++++++++++++++++++++++++ src/producer.h | 20 ++++++++++++++++++++ wscript | 15 +++++++++++++++ 9 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 lib/index.js create mode 100644 package.json create mode 100644 src/consumer.cc create mode 100644 src/consumer.h create mode 100644 src/franz.cc create mode 100644 src/producer.cc create mode 100644 src/producer.h create mode 100644 wscript diff --git a/.gitignore b/.gitignore index ff4fd1d..740646e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,8 @@ node_modules npm-debug.log *#*# -*~ \ No newline at end of file +*~ + +build* + +*.lock-wscript \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..ee24a83 --- /dev/null +++ b/lib/index.js @@ -0,0 +1 @@ +module.exports = require('../build/Release/franz'); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..bcc4317 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "franz" + , "version": "0.0.1" + , "description": "Network based distributed tasks" + , "homepage": "" + , "keywords": ["queue", "kafka", "franz"] + , "author": "brett_langdon " + , "contributors": [ + { "name": "brett_langdon", "email": "brett@blangdon.com" } + ] + , "repository":{ + "type": "git" + , "url": "github.com/brettlangdon/franz.git" + } + , "dependencies": { + } + , "main": "./lib/index.js" + , "engines": { "node": ">= 0.6.0" } +} diff --git a/src/consumer.cc b/src/consumer.cc new file mode 100644 index 0000000..7871c93 --- /dev/null +++ b/src/consumer.cc @@ -0,0 +1,39 @@ +#define BUILDING_NODE_EXTENSION +#include +#include "consumer.h" + +using namespace v8; + +Consumer::Consumer() {}; +Consumer::~Consumer() {}; + +Persistent Consumer::constructor; + +void Consumer::Init() { + // Prepare constructor template + Local tpl = FunctionTemplate::New(New); + tpl->SetClassName(String::NewSymbol("Consumer")); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + + constructor = Persistent::New(tpl->GetFunction()); +} + +Handle Consumer::New(const Arguments& args) { + HandleScope scope; + + Consumer* obj = new Consumer(); + obj->Wrap(args.This()); + + return args.This(); +} + +Handle Consumer::NewInstance(const Arguments& args) { + HandleScope scope; + + const unsigned argc = 0; + Handle argv[argc] = {}; + Local instance = constructor->NewInstance(argc, argv); + + return scope.Close(instance); +} diff --git a/src/consumer.h b/src/consumer.h new file mode 100644 index 0000000..2bc381c --- /dev/null +++ b/src/consumer.h @@ -0,0 +1,20 @@ +#define BUILDING_NODE_EXTENSION +#ifndef CONSUMER_H +#define CONSUMER_H + +#include + +class Consumer : public node::ObjectWrap { + public: + static void Init(); + static v8::Handle NewInstance(const v8::Arguments& args); + + private: + Consumer(); + ~Consumer(); + + static v8::Persistent constructor; + static v8::Handle New(const v8::Arguments& args); +}; + +#endif diff --git a/src/franz.cc b/src/franz.cc new file mode 100644 index 0000000..5dfb104 --- /dev/null +++ b/src/franz.cc @@ -0,0 +1,29 @@ +#define BUILDING_NODE_EXTENSION +#include +#include "producer.h" +#include "consumer.h" + +using namespace v8; + +Handle CreateProducer(const Arguments& args) { + HandleScope scope; + return scope.Close(Producer::NewInstance(args)); +} + +Handle CreateConsumer(const Arguments& args) { + HandleScope scope; + return scope.Close(Consumer::NewInstance(args)); +} + +void InitAll(Handle target) { + Producer::Init(); + Consumer::Init(); + + target->Set(String::NewSymbol("createProducer"), + FunctionTemplate::New(CreateProducer)->GetFunction()); + + target->Set(String::NewSymbol("createConsumer"), + FunctionTemplate::New(CreateConsumer)->GetFunction()); +} + +NODE_MODULE(franz, InitAll) diff --git a/src/producer.cc b/src/producer.cc new file mode 100644 index 0000000..d1271ee --- /dev/null +++ b/src/producer.cc @@ -0,0 +1,39 @@ +#define BUILDING_NODE_EXTENSION +#include +#include "producer.h" + +using namespace v8; + +Producer::Producer() {}; +Producer::~Producer() {}; + +Persistent Producer::constructor; + +void Producer::Init() { + // Prepare constructor template + Local tpl = FunctionTemplate::New(New); + tpl->SetClassName(String::NewSymbol("Producer")); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + + constructor = Persistent::New(tpl->GetFunction()); +} + +Handle Producer::New(const Arguments& args) { + HandleScope scope; + + Producer* obj = new Producer(); + obj->Wrap(args.This()); + + return args.This(); +} + +Handle Producer::NewInstance(const Arguments& args) { + HandleScope scope; + + const unsigned argc = 0; + Handle argv[argc] = {}; + Local instance = constructor->NewInstance(argc, argv); + + return scope.Close(instance); +} diff --git a/src/producer.h b/src/producer.h new file mode 100644 index 0000000..99aa7b9 --- /dev/null +++ b/src/producer.h @@ -0,0 +1,20 @@ +#define BUILDING_NODE_EXTENSION +#ifndef PRODUCER_H +#define PRODUCER_H + +#include + +class Producer : public node::ObjectWrap { + public: + static void Init(); + static v8::Handle NewInstance(const v8::Arguments& args); + + private: + Producer(); + ~Producer(); + + static v8::Persistent constructor; + static v8::Handle New(const v8::Arguments& args); +}; + +#endif diff --git a/wscript b/wscript new file mode 100644 index 0000000..76076dd --- /dev/null +++ b/wscript @@ -0,0 +1,15 @@ +srcdir = '.' +blddir = 'build' +VERSION = '0.0.1' + +def set_options(opt): + opt.tool_options('compiler_cxx') + +def configure(conf): + conf.check_tool('compiler_cxx') + conf.check_tool('node_addon') + +def build(bld): + obj = bld.new_task_gen('cxx', 'shlib', 'node_addon') + obj.target = 'franz' + obj.source = ['src/consumer.cc','src/producer.cc','src/franz.cc'] \ No newline at end of file