--------------------------------------------------------------------
改造OpenMeetings成为Flash视频聊天室(一)
改造OpenMeetings成为Flash视频聊天室(二)
改造OpenMeetings成为Flash视频聊天室(三)
改造OpenMeetings成为Flash视频聊天室(四)
--------------------------------------------------------------------
要修改代码,其实说到前面两步就差不多了,因为接下来的事情,就是读懂和理解代码,然后按照自己的需求来修改,各人需求不同,自然修改的方案也有很多不同。
不过介于OpenMeetings客户端的开发语言为OpenLaszlo,相信很多人都从来没有接触过,这里我就大致的说下。
学习简单的OpenLaszlo语法
(比较懒的兄弟可以跳过这节直接转到下面的“懒人***室”,呵呵)
推荐大家去看一看OpenLaszlo Explorer中的Laszlo in 10 Minutes,启动Laszlo服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/laszlo-explorer/index.jsp就 可以看见(Windows下的安装后直接双击桌面图标就能够自动触发浏览器访问此地址)。这个是给大家对于OpenLaszlo的语法进行一个简单的介 绍。另外,点击Documentation下面的LZX Reference还能够看到更详细的每个标签和指令的介绍。这些应该都会在修改代码过程中有所帮助。我这里介绍几个修改代码时可能会用的多的:
1. 类的继承、定义与使用
2. 事件与触发
3. 基本元素view, text
4. 数据绑定(dataset)
看这些相信最多花费你1-2个小时的时间,然后你就可以开始修改了。
在调式模式下启动OpenMeetings
首先说下我修改时的调试方法,我是在后台启动部署了OpenMeetings服务器端的Red5和部署了客户端的OpenLaszlo两个服务器,然后访问http://127.0.0.1:8080/lps-4.0.9.1/videoconference/main.lzx?lzr=swf8,即可编译并启动OpenMeetings客户端
然 而,在OpenMeetings客户端的根路径下其实有两个主文件,一个main.lzx和maindebug.lzx,这两个都可以用来整合编译并启动 OpenMeetings客户端,但maindebug.lzx是带调试界面的,更便于修改用,我们可以把访问地址改为http://127.0.0.1:8080/lps-4.0.9.1/videoconference/maindebug.lzx?lzr=swf8,这样每次运行都会有一个调试框,里面会显示很多客户端本身就带有的调试信息。当然你也可以自己在代码中写入调试信息,Debug.write(xxxx);运行时即会将xxxx的内容显示在调试框中。
懒人***室
有很多兄弟肯定还是比较懒的,接下来我将几个简单又比较通用的修改帖上来,按照这个修改完成以后基本上就是一个简单的***室了,下面的步骤不分先后,你可以根据自己的需求决定哪些需要修改哪些不需要:
1. 去掉邮件注册
前面我们介绍了OpenMeetings安装的时候必须设置一个邮件服务器,如果没有邮件服务器则前台是无法注册的。现在我们就把这个烦人的邮件注册去掉。
服务器端文件中,找到org.xmlcrm.app.data.user.Usermanagement类,找到下面一行
Long user_id = this.registerUserInit(3, 1, 0, 1, login, Userpass,lastname, firstname, email, age, street, additionalname,fax, zip, states_id, town, language_id, true, new LinkedHashMap());
将倒数第二个true改为false,部署以后再到前台注册,现在已经不会提示Invalid EMail了
2. 修改界面左上角网站名称和连接
修改config.xml文件中:
<currentappname>xxx</currentappname>为网站名称(可以为中文)
<currentappnameurl>、<currentappnamebugurl>标签为自己的网站URL
3. 修改登录框,设置默认语言为中文
每次登陆以后默认都是英文的,要选择一下语言而且登陆以后才会变成中文,我们可以让它一开始就是中文。
然后修改xmlcrm/hibernate/rtmphib.lzx文件<attribute name="userlang" value="1" type="number" />这一句,value由1改为9(9是chinese simplified在语言那个下拉菜单的顺序)。
修改xmlcrm/auth/checkLoginData.lzx文件combox name="language"标签下的handler name="oninit"事件内容,两行this.selectItemAt(0);全都改为this.selectItemAt(8);,这样系统会 在初始状态下默认选择简体中文(8=9-1)。
这样重新编译,你的界面就初始为简体中文了。
(貌似也可以用管理员帐户在后台直接改)
4. 去掉登录框上不需要的部分
登陆框下面的语言选择,颜色选择和带宽我都去掉了,方法如下:
auth/checkLoginData.lzx文件,其中每个labeltext标签和其下缩进的一个表单标签(combobox /customedittext)一起代表一行的输入框和其前面的名称,将不需要的都在标签最后加入 visible="false"属性(我去掉了最后三项)。
同时注意剩余的labeltext和表单标签中的y值为其所在的纵向坐标,需要修改之让其匹配界面应在的位置。可以参考原删除的标签的y位置。最后的simplelabelbutton就不要改了,因为是按照相对高度定位的。
最后,修改整个窗体的高度,顶部的class标签最后的height属性,改为应有的值,大概是每删除一个表单标签-30,例如删除了3项输入框,就是原有高度260 - (3 x 30) = 170。
5. 修改登入后界面,直接到私人房间界面
对于一个聊天室,登陆以后其实直接到房间列表就够了,所以你需要。。。
/xmlcrm/navi/mainnavi.lzx文件,找到mainnavi类,最后一个handler name="oninit",修改代码行if (i==0) t1.onclick.sendEvent();中间if条件为i==2。这样进入后就会自动进入“会议”菜单
然后找到mainmenumeetingsitem类,下面的handler name="onclick",最后一行else this._menuRef.subviews[0].onclick.sendEvent();改为else this._menuRef.subviews[1].onclick.sendEvent();这样进入后就会自动进入“私人会议”列表界面
6. 去掉房间列表页面中右侧的聊天窗口
进入房间列表页面以后,可以看见右侧有一个聊天窗口,如果你希望屏蔽他们的话。。。
根据需要修改/xmlcrm/content/meetings/publicmeetings.lzx(公共房间列表)/xmlcrm/content /meetings/privatemeetings.lzx(私人房间列表),删除<roomlistdetails x="510" y="50" name="_roomlistdetails" />一行即可
7. 屏蔽顶部菜单
顶部菜单可以进行一些操作,但对于一个聊天室,这些操作其实有些多余,下面是删除办法。
/xmlcrm/navi/mainnavi.lzx文件,找到mainnavi类,先在其中找到第一个view标签(就在紧接一堆attribute下 面,不含有name属性的那个),然后为其加上name属性name="navibar"。然后还是mainnavi类中,找到最后一个handler name="oninit",在Debug.write("this: ",this);后添加代码:
if (value.length == 4) {
this.navibar.setAttribute("visibility", "hidden");
this.itemlist.setAttribute("visibility", "hidden");
this.subitemlist.setAttribute("visibility", "hidden");
}
这样,当管理员登陆的时候看到的还是原来的界面。普通用户登陆则看不到顶部菜单。如果只希望屏蔽一级菜单,而希望留下“公共会议”和“私人会议”菜单,则 不要第三行this.subitemlist.setAttribute("visibility", "hidden");即可。
8. 屏蔽右上角菜单,仅剩下Logout登出
登陆进去以后,屏幕右上角总是显示三项:用户、退出、报告错误。如果不希望有用户和报告错误两项的话,就按照下面的做。
/xmlcrm/navi/mainnavi.lzx文件,找到helpandbugs类,将其中name="btn1"和name="btn2"的两个view标签及其包含内容全部删去即可
9. 修改未翻译的文字
即使选择了简体中文,系统依然会有很多地方的显示是英文的,我们需要手工的将部分未翻译过来的单词自己翻译一下,有三种办法:
(1) 在服务器端代码(不是客户端代码)中找到webapp\openmeetings\languages\,里面存的是所有的国际化文 件,english.xml为英语,chinese simplified.xml为中文,用文本编辑器打开以后可以按照你自己的希望对不满意的翻译进行修改。修改以后需要用管理员帐号登陆,然后在【管理】 -【Language-Editor】中Import修改后的xml文件到chinese simplified。
(2) 用管理员帐号登陆,然后在【管理】-【Language-Editor】可以直接对数据库中的语言进行翻译,比较方便。
(3) 直接访问数据库表fieldlanguagesvalues,用select * from fieldlanguagesvalues where language_id = 9即可查看所有的简体中文国际化记录,直接修改value的值也能达到同样的结果,用数据库的好处是查找比较方便,呵呵
另外还有部分语言是硬写在代码里的,这些只需要对整个项目搜索那段英文再修改为中文即可,例如:/conference/popups/changedevice.lzx 中Do not ask again改为中文“下次不再提示”
10. 删除进入房间后顶部菜单中不需要的功能
进入房间后,顶部一排有很多功能菜单,申请主持、文件上传、投票等等,这些功能对于一个纯粹的聊天室来说,有些多余,而且这些功能全都可以在其他地方实现,所以你可以根据需要将顶上的部分功能菜单给删除。
/xmlcrm/content/conference/conferencemenubar.lzx文件中找到conferencemenubar类, 其下每一个labelmenu标签代表一个菜单项,顺序为从左至右,将不需要的菜单项删去或注释掉即可。再在上面一点找到一堆command标签,根据快 捷键将不要的也删除或屏蔽,以避免有人使用快捷键调用功能。
而房间上中的按钮和显示则在文件/conference/moderation/moderationpanel.lzx的moderationpanel类中,同样将不需要的屏蔽即可
11. 国际化房间里主要面板的标题
进入房间后,发现不管怎么修改语言数据,那三块板子顶上的标题就是不变,这是因为这三个标题没有绑定国际化的原因。
/xmlcrm/content/conference/conference.lzx中,找到videoboard类,删去title属性,加上labelid="313";
找到whiteboardpanel类,删去title属性,加上labelid="315";
找到filespanel类,删去title属性,加上labelid="314"
12. 删除房间里左下角框中不需要的功能
房间里左下角框里面是有聊天、文件和成员三个选项的,文件用来控制白板,还有些用,而投票在***室里面恐怕用不上,所以去掉。
/conference/tabbar/conferencecontainertab.lzx中,找到conferencecontainertab类,3个openmeetingsTabButton标签每个代表一个tab按钮,屏蔽不需要的
13. 修改房间人数限制
有些兄弟认为4人房间的聊天室太无聊。。。不过好像也是。。。又不是打麻将。。所以。
/xmlcrm/conference/roomlistItem.lzx文件中<attribute name="maxUsers" value="4" type="number" />一行,修改value的值即是修改最大人数。最大人数修改以后展示的时候界面可能有些乱,这个就你自己去调整了,因为我做的时候没有这个需求, 所以没有测试过实际效果,呵呵~~
客户端文件结构简单介绍
这里只介绍几个对界面修改比较有用的文件:
/config.xml 一些全局参数定义
/main.lzx 主文件,用来整合其他文件
/maindebug.lzx 带debug的主文件
/xmlcrm/hibernate/rtmphib.lzx 定义并实例化hibrtmpconnection类,负责主要流程调度及部分默认配置,比较重要
/xmlcrm/hibernate/netremotecallhib.lzx 定义netremotecallhib类,继承于netremotecall类,负责调用后台服务器端Java方法,使用很多
/xmlcrm/content/meetings/publicmeetings.lzx 定义公共会议列表相关类
/xmlcrm/content/meetings/privatemeetings.lzx 定义私人会议列表相关类
/xmlcrm/conference/roomlistItem.lzx 定义roomlistItem类,代表会议房间列表页面中的一个房间展示
/xmlcrm/auth/checkLoginData.lzx 定义checkLoginData类,负责登陆框的显示
/xmlcrm/navi/mainnavi.lzx 定义登录后的主界面展示相关类
/xmlcrm/content/conference/conferencemenubar.lzx 定义房间左上角菜单
/conference/moderation/moderationpanel.lzx 定义房间上中的显示和按钮
/xmlcrm/content/conference/conference.lzx 定义房间主要的三个面板类
/conference/tabbar/conferencecontainertab.lzx 定义房间左下角聊天窗口中的内容
/conference/video/basevideoobject.lzx 视频对象的基类,定义了视频图像的外框显示
/conference/video/videoobjectbroadcast.lzx 视频播放类,定义了会议房间中的本人的视频显示
/conference/video/videoobjectplayBroadcast.lzx 视频播放类,定义了会议房间中的其他人的视频显示
/conference/video/videocontainer.lzx 视频容器类,定义了房间内左上角框里的所有视频对象的展示
/conference/whiteboard/ 白板相关类
/conference/tabcontent/chat 房间内的聊天窗口相关类
/conference/tabcontent/files 房间内的文件窗口相关类
部署
要部署的时候建议把整个客户端生成一个swf文件然后复制到服务器端(即使用SOLO方式编译,如果不知道如何编译,参考我的另一篇文章 OpenLaszlo下的Proxied和SOLO两种编译方法 ), 这样服务器端部署的时候就不需要再开启OpenLaszlo服务器了。另外注意,将修改过的config.xml文件和swf文件一起拷贝到服务器去,否 则有些修改又没了,呵呵。(如果swf文件和red5是部署在同一台机器上的,建议你把config.xml文件中rtmphostlocal留空,这样 可以省去很多麻烦)
拷贝过去后先修改index.jsp文件中SWFObject的第一个参数,使之指向你的swf文件。然后访问http://localhost:5080/openmeetings/即可看到效果,部署完成。
然 后,然后。。。如果你在自己的机器上部署了,希望外网的朋友来和你一起测试或使用的话,注意要配置路由上用虚拟主机端口映射,开放1935、8088、 5080三个端口指向自己(当然也可以直接将自己设为DMZ。。如果感觉自己够安全的话。。),如果是非SOLO方式还要为Laszlo服务器开放 8080;另外,机器上如果有Kapersky之类的话需要关闭,否则会拦截外网的端口访问。
写在最后
好了,东西写的差不多了,虽然我自己修改这个所做的远不止写的这些,但我想我也只能写到这里了。
我写这些东西的目的只是希望大家能够得到一点启发,每个人需求都不一样,我相信根据我的修改肯定达不到你的要求,但相信你通过边做边学习这些之后,完成后面的事情应该不是什么难事了。
我平时少上IM,我的邮箱是fallen_lord@126.com,有兴趣的朋友可以mail我交流,呵呵~~
星期天准备去海淀学校散散心~~
最后祝大家周末愉快~~^_^
--------------------------------------------------------------------
改造OpenMeetings成为Flash视频聊天室(一)
改造OpenMeetings成为Flash视频聊天室(二)
改造OpenMeetings成为Flash视频聊天室(三)
改造OpenMeetings成为Flash视频聊天室(四)
--------------------------------------------------------------------