ejabberd模块开发
来源:互联网 发布:淘宝客手机版插件 编辑:程序博客网 时间:2024/06/08 01:29
ejabberd模块开发
(金庆的专栏 2016.8)
参考:
https://docs.ejabberd.im/developer/modules/
运行
ejabberdctl modules_update_specs
会创建 C:\.ejabberd-modules\source\, 其中下载了
https://github.com/processone/ejabberd-contrib
可以同样在sources目录下创建自己的模块代码,如:
$HOME/.ejabberd-modules/sources/mod_mysupermodule/
运行
ejabberdctl module_check mod_mysupermodule
可检查该目录是否符合模块规定(policy), 如:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_check mod_mysupermodule
Error: [{missing,"COPYING"},
{missing,"README.txt"},
{missing,"src (Erlang) or lib (Elixir) sources directory"},
{missing_meta,url},
{missing_meta,home},
{missing_meta,summary},
{missing_meta,author}]
需要COPYING和README.txt文件,src目录。
还有 mod_mysupermodule.spec 文件,仿照其他模块的例子写就行了,例如:
url: "http://localhost"
summary: "My super m"
home: "http://localhost"
author: "Jin Qing"
可以查看到可用模块:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl modules_available
...
mod_mysupermodule My super m
...
即使没有任何源文件,也可以module_install.
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule
ok
更改 src\mod_mysupermodule.erl 后,无法再次安装:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule
Error: conflict
好像可以用 module_upgrade:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_upgrade mod_mysupermodule
src/mod_mysupermodule.erl:4: Warning: undefined callback function depends/2 (beh
aviour 'gen_mod')
src/mod_mysupermodule.erl:4: Warning: undefined callback function mod_opt_type/1
(behaviour 'gen_mod')
ok
C:\Program Files\ejabberd-16.08\bin>
按文档说明,需要手工修改
C:\Users\jinqing\AppData\Roaming\ejabberd\conf\ejabberd.yml
实际测试配置不需要手工修改,只需要创建
C:\.ejabberd-modules\sources\mod_mysupermodule\conf\mod_mysupermodule.yml
modules:
mod_mysupermodule: {}
按文件说明,需要手工复制编译生成的
C:\.ejabberd-modules\mod_mysupermodule
到
C:\Program Files\ejabberd-16.08\lib\mod_mysupermodule
查看代码,应该是会自动添加代码目录
C:\.ejabberd-modules\mod_mysupermodule\ebin
需如下更改ext_mod.erl:
modules_dir() ->
DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"),
- getenv("CONTRIB_MODULES_PATH", DefaultDir).
+ getenv("CONTRIB_MODULES_PATH", filename:absname(DefaultDir)).
不然add_patha/1会失败:
code:add_patha("/.ejabberd-modules/mod_mysupermodule/ebin").
然后重启(可能不需要):
C:\Program Files\ejabberd-16.08\bin>ejabberdctl restart
(金庆的专栏 2016.8)
参考:
https://docs.ejabberd.im/developer/modules/
运行
ejabberdctl modules_update_specs
会创建 C:\.ejabberd-modules\source\, 其中下载了
https://github.com/processone/ejabberd-contrib
可以同样在sources目录下创建自己的模块代码,如:
$HOME/.ejabberd-modules/sources/mod_mysupermodule/
运行
ejabberdctl module_check mod_mysupermodule
可检查该目录是否符合模块规定(policy), 如:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_check mod_mysupermodule
Error: [{missing,"COPYING"},
{missing,"README.txt"},
{missing,"src (Erlang) or lib (Elixir) sources directory"},
{missing_meta,url},
{missing_meta,home},
{missing_meta,summary},
{missing_meta,author}]
需要COPYING和README.txt文件,src目录。
还有 mod_mysupermodule.spec 文件,仿照其他模块的例子写就行了,例如:
url: "http://localhost"
summary: "My super m"
home: "http://localhost"
author: "Jin Qing"
可以查看到可用模块:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl modules_available
...
mod_mysupermodule My super m
...
即使没有任何源文件,也可以module_install.
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule
ok
更改 src\mod_mysupermodule.erl 后,无法再次安装:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule
Error: conflict
好像可以用 module_upgrade:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_upgrade mod_mysupermodule
src/mod_mysupermodule.erl:4: Warning: undefined callback function depends/2 (beh
aviour 'gen_mod')
src/mod_mysupermodule.erl:4: Warning: undefined callback function mod_opt_type/1
(behaviour 'gen_mod')
ok
C:\Program Files\ejabberd-16.08\bin>
按文档说明,需要手工修改
C:\Users\jinqing\AppData\Roaming\ejabberd\conf\ejabberd.yml
实际测试配置不需要手工修改,只需要创建
C:\.ejabberd-modules\sources\mod_mysupermodule\conf\mod_mysupermodule.yml
modules:
mod_mysupermodule: {}
按文件说明,需要手工复制编译生成的
C:\.ejabberd-modules\mod_mysupermodule
到
C:\Program Files\ejabberd-16.08\lib\mod_mysupermodule
查看代码,应该是会自动添加代码目录
C:\.ejabberd-modules\mod_mysupermodule\ebin
实际发现
2016-08-24 16:27:54.016 [critical] <0.550.0>@gen_mod:start_module:162 Problem starting the module mod_mysupermodule for host <<"zt-2203857">>
options: []
error: undef
[{mod_mysupermodule,start,[<<"zt-2203857">>,[]],[]},
{gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,154}]},
{lists,foreach,2,[{file,"lists.erl"},{line,1337}]},
{ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,76}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,273}]}]
2016-08-24 16:27:54.016 [critical] <0.550.0>@gen_mod:maybe_halt_ejabberd:170 ejabberd initialization was aborted because a module start failed.
是Windows下还有问题。
需如下更改ext_mod.erl:
modules_dir() ->
DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"),
- getenv("CONTRIB_MODULES_PATH", DefaultDir).
+ getenv("CONTRIB_MODULES_PATH", filename:absname(DefaultDir)).
不然add_patha/1会失败:
code:add_patha("/.ejabberd-modules/mod_mysupermodule/ebin").
然后重启(可能不需要):
C:\Program Files\ejabberd-16.08\bin>ejabberdctl restart
0 0
- ejabberd模块开发
- ejabberd模块开发
- ejabberd服务端开发笔记
- Ejabberd外部组件开发
- ejabberd开发和部署
- 【erlang】【rebar】【Elixir】【ejabberd】【模块】
- Ejabberd源码解读-ejabberd_listener模块
- Ejabberd源码解读-ejabberd_c2s模块
- Ejabberd源码解读-ejabberd_sm模块
- Ejabberd源码解读-ejabberd_hooks模块
- Ejabberd源码解读-ejabberd_router模块
- java-xmpprpc结合ejabberd开发
- ejabberd
- ejabberd
- Ejabberd 插件开发 --- IQ截获与处理
- IM开发(1)-ejabberd服务器搭建
- ejabberd服务器mod_http_fileserver模块修改提供crossdomain.xml
- XMPP ejabberd 服务器编程(一)为服务器添加模块
- Microsoft SQL Server 2008 R2官方下载地址
- 结构体 枚举 typedef
- Linux基本命令(二)
- 16年夏天八月份开发经验
- urllib2 使用代理服务器
- ejabberd模块开发
- NGUI自定义事件(MonoBehaviour)&& 界面控件基类
- 羽化制作lomo照片
- ITSA [C_MM115-中] 奇妙數列
- 数据结构之线性结构--数组
- 文章标题
- 程序员(技术开发)修炼三部曲(单元测试之道、版本控制之道、项目自动化之道)
- 预处理指令 宏定义 条件编译指令 static和extern关键字
- 复杂数据类型的映射之枚举