ROS路由器脚本文件编辑&更新器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StevenKyleLee/article/details/7776847

2011年,也就是去年3,4月份写的东西了

当时是帮一个朋友做的,现在这个东西已经没什么用了

在博客这里甩出来吧

 

其实,这个程序到底拿来干什么用的,

身为作者的我也不是十分清楚,而只是按照朋友口述的需求把程序做了出来。

这个程序的大概功能是:

有一种路由器叫:ROS,它的各种设置可以用脚本来描述

我的程序的功能就是提供一个可视化的界面来更新、解析、编辑、输出ROS路由器的脚本

程序分为2端:客户端,服务器端

客户端功能:载入,解析,编辑,输出本地ROS脚本,并可以连接服务器程序更新最新的脚本文件。

服务端功能:就是供客户端程序同步脚本文件之用。

 

开发环境:VS2008,C++,MFC

可执行下载:http://download.csdn.net/detail/stevenkylelee/4447126

源代码下载:http://download.csdn.net/detail/stevenkylelee/4447149

 

那种ROS脚本的“样貌”大概如下:

 

看起来挺乱的是吧,其实这种脚本的格式是很有规律的。

(至于什么规律,这里就不多说了,下载我的程序自己用记事本开打*.rsc文件仔细观察,不难就会发现)

值得一提的是,这种脚本对于中文有它自己的一套编码方式,

例如:字符串"\BD\A3\CF\C0\B7\A1\CD\E2\B4\AB"实际代表的是"剑侠贰外传"。

关于ROS脚本的中文问题,我在客户端写有相应的类和工具来进行编码和解码。

 

下图,是把一个ROS脚本文件拖曳到客户端界面后的样子

 

这个就是ROS脚本的可视化界面了。

ROS的一个脚本文件中,可以包含N个页面。

在菜单栏下,有一个Tab控件,用于动态地显示解析到的ROS脚本的所有页面。

上图查看的是queue tree设置页面。

ROS的大多数页面都是表示线性结构内容的,但queue tree页面表示的是一种树形结构。

因为MFC没有 树形+列表视图 组合起来的控件

我就只有使用ListView的第一列的内容的缩进来表示树形关系了。- -

随便说下,ListView上的”最大“,”最小“列名也是根据脚本内容动态解析出来然后创建的。

 

下图是显示 ip firewall mangle 页面内容的样子:

 

其实ListView控件最初是没有列和行的。

上图看到的内容,包括ListView的列头(一堆列名),

都是根据ROS脚本解析出来的结果动态创建的。

 

呵呵。观察ROS脚本找寻它的规则和格式,写解析算法,耗费了我好多精力和时间。

(当时其实也是想练手下刚学会的FSM思想)

用C#写会比C++简单,因为STL的string类并不很好用,而MFC的CString也好不到哪里去

它俩连最起码的Split都没有,害哥还得自己实现这个非常基础的字符串操作算法,日了。

 

MFC做界面是很蛋疼的,C#的Winform控件都有个Anchor属性,

这个属性的作用是当窗口大小发生改变时,动态地改变相应控件的位置和大小。

MFC中没有现成的东西实现这个功能,要实现这个功能的话,就只有自己写!

(随便说下,去年国庆节前,面试上海巨人集团,当时面试题就出了类似这样需求的一题,

我直接把这个项目,实现这个功能的那个类发给他们!

呵呵。当然,最后是拿到了offer,而我最终没有过去)

 

下图是服务器端界面,和客户端程序一样。

它也可以根据改变窗口的大小适当地调整其控件的位置和大小

前面也说了,服务器程序它的作用就是提供更新服务器。

所以,其实它没窗口界面也是可以的。

 

最后说明一下我的源代码吧

源代码有一个叫“SCL”的目录,SCL是Steven Class Library的缩写,哈哈。

这个目录放的是当时我自己写一个C++类库,以源代码的形式。

我自己的这个类库模仿了C#.net类库的设计

封装了Tcp通信类,文件映射类,字符串操作类(自己扩展了一些诸如Split等操作),

Ini文件读写类,网卡信息获取类,防Winform的Anchor属性的类 等。

当然,所有的类的实现,都是用STL或者Win32 Api的。

如果,你对我做的这个程序不太感兴趣,

也不妨看看我写的那些“自认为有可复用性的基础类”吧

说不定,对你会有一些帮助或启示。:)

  

猜你喜欢

转载自blog.csdn.net/StevenKyleLee/article/details/7776847
今日推荐