Nodejs扩展,实现消息弹窗

页面导航:首页 > 网络编程 > JavaScript > Nodejs扩展,实现消息弹窗

Nodejs扩展,实现消息弹窗

来源: 作者: 时间:2016-02-20 09:49 【

模块的C++代码 node_gtknotify cc include include include include include using namespace v8;class GtkNotify : node::ObjectWrap{public:GtkNotify(){}~GtkNotify(){}std::

 

 

模块的C++代码 node_gtknotify.cc

#include

#include

#include

#include

#include

 

using namespace v8;

 

class GtkNotify : node::ObjectWrap{

public:

GtkNotify(){}

~GtkNotify(){}

 

std::string title;

std::string icon;

 

static Persistent persistent_function_template;

 

static void Init(Handle

HandleScope scope;

Local local_function_template = FunctionTemplate::New(New);

GtkNotify::persistent_function_template = Persistent::New(local_function_template);

GtkNotify::persistent_function_template->InstanceTemplate()->SetInternalFieldCount(1);

GtkNotify::persistent_function_template->SetClassName(String::NewSymbol(Notification));

GtkNotify::persistent_function_template->InstanceTemplate()->SetAccessor(String::New(title), GetTitle, SetTitle);

GtkNotify::persistent_function_template->InstanceTemplate()->SetAccessor(String::New(icon), GetIcon, SetIcon);

NODE_SET_PROTOTYPE_METHOD(GtkNotify::persistent_function_template, send, Send);

target->Set(String::NewSymbol(notification), GtkNotify::persistent_function_template->GetFunction());

}

 

static Handle New(const Arguments& args){

HandleScope scope;

GtkNotify* instance = new GtkNotify();

instance->title = Node.js;

instance->icon = terminal;

instance->Wrap(args.This());

return args.This();

}

 

static Handle Send(const Arguments& args){

HandleScope scope;

GtkNotify* instance = node::ObjectWrap::Unwrap(args.This());

String::Utf8Value v8str(args[0]);

//弹出消息框

Notify::init(Basic);

Notify::Notification n(instance->title.c_str(), *v8str, instance->icon.c_str());

n.show();

return Boolean::New(true);

}

 

static Handle GetTitle(Local property, const AccessorInfo& info){

GtkNotify* instance = node::ObjectWrap::Unwrap(info.Holder());

return String::New(instance->title.c_str());

}

 

static Handle GetIcon(Local property, const AccessorInfo& info){

GtkNotify* instance = node::ObjectWrap::Unwrap(info.Holder());

return String::New(instance->icon.c_str());

}

 

static void SetTitle(Local property, Local value, const AccessorInfo& info) {

GtkNotify* instance = node::ObjectWrap::Unwrap(info.Holder());

String::Utf8Value v8str(value);

instance->title = *v8str;

}

 

static void SetIcon(Local property, Local value, const AccessorInfo& info) {

GtkNotify* instance = node::ObjectWrap::Unwrap(info.Holder());

String::Utf8Value v8str(value);

instance->icon = *v8str;

}

};

 

Persistent GtkNotify::persistent_function_template;

 

extern C{

static void init(Handle

GtkNotify::Init(target);

}

NODE_MODULE(node_gtknotify, init);

}

 

node-gyp配置文件 binding.gyp

{

targets: [

{

target_name: node_gtknotify,

sources: [ src/node_gtknotify.cc ]

}

]

}

 

目录结构

\

 

运行命令

node-gyp configure

node-gyp build

 

如果没有安装相应的库/路径找不到,中间会出现头文件找不到的错误;

笨拙的解决方法,在build下面的Makefile中添加

CXXFLAGS += -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/giomm-2.4 -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/pangomm-1.4 -I/usr/lib/x86_64-linux-gnu/pangomm-1.4/include -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/cairomm-1.0 -I/usr/include/freetype2 -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/include/atk-1.0 -I/usr/include/libnotifymm-1.0

 

上述的库是根据错误提示进行安装的

 

script测试代码

var notify = require(./build/Release/node_gtknotify);

var notification = new notify.notification();

notification.title = Notification title;

notification.icon = emblem-default; // see /usr/share/icons/gnome/16x16

notification.send(hello,world);

 

注意,运行时可能有错误提示:**符号找不到,这是因为没有添加相应的共享链接库

\

 

\

 

解决方法:在build/node_gtknotify.target.mk中添加

LIBS := -lglibmm-2.4 -lnotify -lnotifymm-1.0

 

运行效果

\

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<