Nodejs扩展,实现消息弹窗

参考https://github.com/olalonde/node-notify的实现

模块的C++代码 node_gtknotify.cc

#include <v8.h>

#include <node.h>

#include <string>

#include <gtkmm-3.0/gtkmm.h>

#include <libnotifymm.h>

using namespace v8;

class GtkNotify : node::ObjectWrap{

public:

GtkNotify(){}

~GtkNotify(){}

std::string title;

std::string icon;

static Persistent<FunctionTemplate> persistent_function_template;

static void Init(Handle<Object> target){

HandleScope scope;

Local<FunctionTemplate> local_function_template = FunctionTemplate::New(New);

GtkNotify::persistent_function_template = Persistent<FunctionTemplate>::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<Value> 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<Value> Send(const Arguments& args){

HandleScope scope;

GtkNotify* instance = node::ObjectWrap::Unwrap<GtkNotify>(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<Value> GetTitle(Local<String> property, const AccessorInfo& info){

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

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

}

static Handle<Value> GetIcon(Local<String> property, const AccessorInfo& info){

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

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

}

static void SetTitle(Local<String> property, Local<Value> value, const AccessorInfo& info) {

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

String::Utf8Value v8str(value);

instance->title = *v8str;

}

static void SetIcon(Local<String> property, Local<Value> value, const AccessorInfo& info) {

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

String::Utf8Value v8str(value);

instance->icon = *v8str;

}

};

Persistent<FunctionTemplate> GtkNotify::persistent_function_template;

extern "C"{

static void init(Handle<Object> target){

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

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

Javascript测试代码

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

运行效果

时间: 2024-12-29 01:10:50

Nodejs扩展,实现消息弹窗的相关文章

Qt 实现桌面右下角消息弹窗提示

简单的做了一个类似QQ消息提示的消息弹窗提示的小模块,便于在系统后台程序提示检测的信息,使用Qt开发,设计整体思路是做一个无框架的widget,自己实现标题栏和内容栏,添加了向上移出,自动消隐退出效果,窗体简单,模块结构便于以后进行扩展和移植,旨在显示文字信息,通过按钮操作与主程序进行通信,运行结果如图 一.弹窗主体部分 class widget 1 #include "widget.h" 2 3 #include "titlewidget.h" 4 5 #incl

js封装好的模仿qq消息弹窗代码

在我们的日常开发中,或者生活中,经常需要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&

[Windows] 解决VLC Media Player的Crash Reporting消息弹窗

运行环境:Windows 8.1 (64bits), VLC Media Player 2.1.3 异常描述:首次启动VLC播放影音文件时,一切正常.此后每次启动VLC都弹出"VLC Crash Reporting",点击"Yes"或"No"后,VLC会开始播放文件,一切正常. 解决方法:VLC安装完毕后,因为"%AppData%"中没有crashdump文件,VLC正常启动.VLC正常启动后,在"%AppData%

C++编写nodejs扩展实战

C++编写nodejs扩展实战 之前有用PHP写过根据IP地址查询IP归属地,后来改用C语言编写,效率果然大幅度提高,然后转化为PHP的扩展. 想起之前有过使用手机号码查询号码归属地,最近又有在研究nodejs,于是就使用C++编写了nodejs的扩展. 遇到的问题确实不少,记录下来,供大家参考: 1.字符编码的问题:nodejs对于gbk编码支持不够好,为了提高程序效率,先把IP归属地的资源转化为utf-8的编码,具体使用PHP脚本foreach使用iconv转换 2.参数传递的问题,很多程序

XMPP-可扩展的消息和出席信息协议(概述)

概述 可扩展消息的和出席信息协议(XMPP)主要采用XML流实现在任意两个网络终端接近实时的交换结构化信息,XMPP提供一个通用的可扩展的框架来交换XML数据,用于准实时消息和出席信息以及请求-响应服务. 通用的架构 XMPP没有指定任何特定的网络结构,但它通常是采用客户-服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信. 1.同一域名服务器和客户端组成的简单XMPP架构 具有惟一名称的客户机通过相关的服务器与另外一个具有惟一名称的客户机进行

Cocos2d-X lua 学习笔记之消息弹窗

实现游戏中需要在屏幕底部弹出消息提示弹窗,经过特定时间后渐隐消失.当有新的消息提示时,原来没有消失的弹窗会上移,并继续渐隐直至消失. 转载声明:http://blog.csdn.net/operhero1990/article/details/47165365 1.使用cocostudio建立一个最简单的弹窗界面,命名为hintFrame 设置黑底的透明度为100/255,这样能起到一个蒙版的效果.两个Label分别显示消息题目和内容. 2.创建控制弹窗的lua类脚本,命名为UI_hintFra

Node.js + Nginx搭建基于websocket的、可扩展的消息中心

前言:最近需要搭个可扩展的聊天室环境,倒腾了半天,整理出了这么个方案.这个方案满足下列需求: ⑴ 基于websocket通讯. ⑵ node.js server作为deamon进程在后台一直运行. ⑶ socket server可通过增加服务器的形式横向扩展. 小编本人搞技术的,做事力求直击要害,言简意赅,所以把主要的步骤说明了下.需要详细了解的请看文章底部的"参考". 1. 安装nodejs ⑴ 准备工作 yum -y install gcc make gcc-c++ openssl

nodejs实现简单消息推送

server1.js var http = require('http'); var express = require('express'); var sio = require('socket.io'); var app = express(); app.use(express.static(__dirname + '/')); var server = http.createServer(app); server.listen(3001, '127.0.0.1'); var io = si

Php扩展--protocolbuffers消息打包

安装/配置 编译安装 wge thttp://pecl.php.net/get/protocolbuffers-0.2.6.tgz tar -zxvfprotocolbuffers-0.2.6.tgz cd protocolbuffers-0.2.6/ /usr/local/php-5.3.3/bin/phpize ./configure --with-php-config=/usr/local/php-5.3.3/bin/php-config make make install 修改php.i