From 61fa3661d0127795016d36681ec5770476a1f828 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sat, 24 Mar 2018 20:07:57 +0800 Subject: [PATCH] =?UTF-8?q?mac=20add=20=E6=B7=BB=E5=8A=A0=E4=BA=86nfs?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5c73e8c3..b015c6d7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ context: 终端工具链,各种实用的功能模块,通过简洁的接口 * 2.0 应用示例--启动WEB服务器 * 2.1 常用命令 * 2.2 web模块的命令 +* 2.3 nfs模块的命令 * 3 context开发 * 3.0 context模块开发入门 * 3.1 context模块的生命周期与继承多态 @@ -91,6 +92,20 @@ $ tail -f var/bench.log 如第一行日志,消息编号为22,消息类型是start启动模块,是ctx发送给cli模块的消息。 从日志中可以看出bench在启动时,启动了词法解析模块lex与语法解析模块yac,并加载了启动脚本etc/init.shy。 +#### 2.0.3 运行本机命令 +当输入的命令在bench中没有实现时,bench会调用本地shell对命令进行解释执行。 +```sh +$ bench +> pwd +/Users/shaoying/context +> ls +etc +var +LICNESE +README.md +... +``` + ### 2.1 常用命令 #### 2.1.1 缓存管理cache ```sh @@ -228,6 +243,49 @@ web> route script /s echo.shy ``` content代表脚本的文件名,即web服务请求此route路径时,回复的内容为content指定的脚本运行后输出的内容。 +### 2.3 nfs模块的命令 +nfs模块,文件读写读写模块,可以读写本地文件或远程文件。 +```sh +$ bench +> ~nfs +> genqr qr.png hello +``` +启动bench,进入nfs模块,调用genqr生成二维码图片。 +可以看到在bench的当前运行目录生了一个png图片,可以用手机扫描一下,查看二维码内容。 + +nfs模块,还支持文件的远程传输。 +```sh +$ bench +> ~nfs +> listen ":9191" +``` +启动bench,进入nfs模块,调用listen开启一个文件服务器,监听的端口为"0.0.0.0:9191"。 + +在另外一个目录,一定注意是另外一个目录中。运行以下命令。 +```sh +$ bench +> ~nfs +> dial ":9191" +> context +nfs(ctx::aaa::): begin() 存储中心 +file2(nfs::aaa::): start(etc/init.shy) 扫描文件 +file3(nfs::aaa::): start(127.0.0.1:63458->127.0.0.1:9191) 打开文件 +file1(nfs::aaa::): start(var/bench.log) 打开文件 +stdio(nfs::aaa::): start(stdio) 扫描文件 +> send pwd +/Users/shaoying/context +> pwd +/Users/shaoying/context/tmp +> recv file qr.png +> ls +qr.png +``` +启动bench,进入nfs模块,调用dial连接文件服务器。 +输入context命令,可以查看所有子模块,这里可以看到多了一个file3的模块,从备注信息中可以看出,这是一个网络连接。 +输入send可以执行远程命令,如send pwd就可以查看远程bench运行的当前目录。 +输入pwd查看当前bench的运行目录。 +输入recv命令就可以把远程文件复制到本地。 + ## 3 context开发 ### 3.0 context模块开发入门 在context目录下,创建目录src/example/demo,然后打开src/example/demo/demo.go文件,并输入以下代码。 @@ -348,8 +406,11 @@ Config为配置项,模块内的一些常量或是可配置的数据,就可 Command的命令项,模块向外提供的各种API接口或是CLI接口都统一定义为command,即可以被其它模块在代码中直接调用,也可以在命令行实时调用。 通过这种方式直接解除了模块的依赖关系,每个模块都可以独立编译,独立运行。 通过脚本或是配置把各种模块组合在一起,完成复杂的功能。这样大大降低了代码的重复性,提高了代码的通用性。 + Cache为缓存项的定义,Name为缓存项的名字,Value为缓存项的值,Help为缓存项的帮助信息,Hand为缓存项读写函数,可选。 + Config为配置项的定义,Name为配置项的名字,Value为配置项的值,Help为配置项的帮助信息,Hand为配置项读写函数,可选。 + Command为命令项的定义,Name为命令项的名字,Help为命令项的帮助信息,Hand为命令项执行函数。 ```go @@ -363,6 +424,7 @@ echo命令,按照缓存项format的格式输出配置项default的内容。 这样可以从命令行查看缓存项format的值,就可以知道echo命令输出的格式。 这样可以从命令行设置配置项default的值,就可以改变echo命令输出的内容。 命令Hand函数,是消息驱动的。所以各种通过消息m就可以调用到各种函数。 + m.Cap()读写当前模块的某个缓存项。 m.Conf()读写当前模块的某个配置项。 m.Echo()输出命令执行结果。 @@ -685,6 +747,7 @@ Call()发送消息,命令执行完成后会调用参数的中的回调函数 如果返回值为false则代表,消息还未处理完成。在其它事件中调用Back()可以再调用回调函数。 ```go +Commands: map[string]*ctx.Command{ "send": &ctx.Command{ Name: "send module", Help: "send something", @@ -738,8 +801,6 @@ one> context demo demo> send one hello world nice ``` - - ## 4 context核心模块详解 ### 4.0 ctx模块中心 ### 4.1 cli命令中心