首页 > 代码库 > iMessenger 2.0.14.0801简述
iMessenger 2.0.14.0801简述
有些梦,看似遥不可及,但并不是不能实现,只要你足够的强!!,人力有时而穷,所以我们可能还需要一些热心人的帮助,这个人可能就是你。
四年来,我们一直在努力,从未放弃。
在我们做好一件事之前,我们永远不知道你这样做的意义。但我们一如既往的坚持,所以!结果很意外!
梦想和现实的距离就是心到手的距离,也许我们手中的现实和我们心中的梦想不同.
我们不知道我们所谓的坚持一开始究竟意欲何为,但最终当你坚持下去后你发现心与手越来越近.
当产品本身和市场无关时,我们选择了站在产品一方.
先进的技术方案:
无论处于何种目的,此次重构我们都选择了全球最顶尖的方案。以C作为内核引擎与框架的的基础语言,并且100%国际化Unicode编码支持,这表示软件将拥有同等产品中最搞的执行力。全系统使用宽字符使其支持任何目标语言的系统上使用国家的语言。我们首次将宽字符加密引入到C的对称加密算法中。这表示您可以将任意国家的语言写入到加密文档或字符串中,打破窄字符使用的僵局。除此之外我们类操作系统架构导出了纯C的接口Api,这表示用友最广泛的使用用例,即使不使用目标语言的Routing与SDK我们也支持任何支持DLL开发的语言调用。这种导出方式同时支持隐式连接和显示链接。
GIPS与H.265的结合使视频应用带宽占用降低一半。UDX使UDP发送快一倍,稳定一倍。即便在极差的网络环境下也保证了数据的安全与网络的可靠性。
多维度数据系统架构,全商业智能数据结构使您可以在其他系统非常方面的读取到到登录用户。多维度数据结构使您的数据库应用开发变得异常简单。多维度数据结构旨在应用数据与系统基础数据的无关,只在应用与系统基础数据库之间建立关系索引即可完成。方便开发应用的同时降低了用户系统与用户关系的可维护性以及易用性和通用性。真正做到一个账户全网畅行,不在需要用老方案绑定用户ID来实现同步登录。因为我们的架构只有一个基础用户系统和基础用户关系系统。无论在那个应用场景中,您只是创建基础用户的关系索引,而非绑定新的用户系统ID。因此很大程度的降低了多系统用户的通用性。和信息互通性。
ILFramework支持使开发者可以使用自己熟悉的语言来构建应用。NetRouting的.NETFramework路由框架允许您使用.NET下的VC.NET, VB.NET C#.NET来构建自己的功能应用。而不需要频繁的使用DllImport来导入动态库。只需引用ILFramework的Library并申明命名空间即可实现对功能的调用。对于.NET下的语言则完全使用目标语言原生语法,这大大简化了其他语言的开发难度。
后期我们将持续为Java和Php提供Expand模块和VM提供程序,这表示在后期开发者可以完全使用PHP和Java来调用内核登录以及开发功能模块。让系统最大可能的扩展。
如果可能,下一次升级我们将会把DNN纳入我们的平台,这表示开发者可以使用最简单的方式实现同声翻译与语音输入。DNN的语音识别精准度比IOS的Siri高7%。比科大讯飞高9%。并且支持全球六十多种语言同声翻译。
如果时间与财力允许,我们将提供功能强大的播放器点播支持。您可以通过自定义浏览器链接协议直接将网络媒体装载进本地播放器。对于受保护的信息我们提供私有格式保护,这表示用户即使下载这些受保护内容也无法通过其他播放器播放。
是什么让我们如此坚持:
五年来我们曾多次想过放弃,开发也是断断续续,没有一个整体的方案,就在我们坚持不下去的时候我们的坚持让我们看到一丝希望,即便这些希望之火并不旺盛,但是我们还是决定孤注一掷的赌一把,无论成败都提供一个最好的方案与产品给用户和开发者。
每次在我们坚持不下去的时候总是有一堆的客户需求,这些需求虽然没能与我们达成协议,但是却提供了让我们继续坚持的动力。事实上我们也不能与客户达成使用协议,因为就目前而言我们还不能将产品用于商业目的,站在我们的角度它还无法达到商用级。因此我们还在继续努力
目录
摘要:...2
1、Client简述...6
1.1 Client Architecture[客户端开发架构].6
1.1.1 Client Module[客户端模块].7
1.2 Client Framework[客户端框架].11
1.2.1 Client Local Framework[客户端框架].11
1.2.2 Client Intermediate language Framework[客户端中间语言框架].11
1.2.3 Client Functional[客户端功能].13
1.3 Client Security[客户端安全].13
1.4 Client Expand[客户端扩展].14
1.5 Mobile Client[移动客户端].14
1.6 Client Web Apps[客户端Web支持].15
1.7 Client Develop[客户端开发].15
1.7.1 Client Functional Expand[客户端功能扩展].15
1.7.2 Client Custom User Interface [客户端自定义Ui].16
1.7.3 Custom Client Develop[自定义客户端开发].17
1.8 Client Details Information[客户端详细信息].23
2、Server简述...29
2.1 Server Architecture[服务器架构].30
2.1.1 Server Module[客户端模块].30
2.2 Server Shell[服务器外壳].30
2.2.1 Server Drive[服务器驱动].30
2.3 Server Framework[服务器框架].30
2.3.1 Server Local Framework[服务器本地框架].30
2.3.2 Server Intermediate language Framework[服务器中间语言框架].30
2.3.3 Host Server[本地服务器托管].30
2.3.4 Intermediate language Host Server[中间语言服务器托管].30
2.3.5 Server Functional[服务器功能].30
2.3.6 Server Message Push[服务器消息推送].30
2.4 Server Security[服务器安全].30
2.5 Server Expand[服务器扩展].30
2.6 Server Cluster[服务器集群].30
2.7 Server Management[服务器管理].30
2.8 Server WebService[服务器Web功能].30
2.9 Server Develop[服务器开发].30
2.9.1 Client Functional Service[服务器功能服务].31
2.9.2 Client Functional Service Expand [服务器功能服务扩展].31
2.9.3 Server Install Pack[服务器安装包].31
2.10 Server Details Information[服务器详细信息].31
2.11Server Database[服务器数据库].31
3、Media Player简述...31
4、Web Manege Framework简述...31
5、Client Install31
6、Server Install31
7、Configuration..31
8、总结...31
1、Client简述
Client=客户端。客户端是直接与单一用户接触的程序,运行与PC或移动设备上。
iMessenger客户端引擎与框架使用非托管的纯C++编写,基于多态与跨语言的开发架构允许其最小化安装.对于功能应用用户可以在使用时根据需求从网络上获取。
最大的可伸缩架构使客户端程序拥有最强大的伸缩功能,全显式链接模式支持功能即插即用。于此同时客户端同样提供了功能强大的ILFramework支持,这使得客户端功能可以用任何支持的语言来开发,如果开发者想用由我们提供的功能,则还可以使用AppFramework提供的接口来调用官方功能模块与应用,如果开发者计划基于我们的平台开发完全自主的客户端则通过AppILFramework与KernelBaseApi来构建完全自主的客户端程序,这一切空前强大并且自由。
1.1 Architecture[客户端开发架构]
客户端本地程序功能由官方开发,并且直接驱动用户适配层与AppFramework以及直接访问与操作KernelEngine,因此本地应用绕过了AppILFramework与KernelBaseApi。但是由于本地应用我们全部使用了显式链接的方式,所以本地应用功能模块调度管理位于AppFramework中。而AppFramework是本地程序框架,则被本地应用程序与扩展模块隐式连接调用。从而形成程序初始化时从AppFramework初始化然后由本地程序模块创建用户视图,接着本地程序模块回调AppFramework中的Api来完成界面创建与参数传递,这表示不管在程序的任何地方都不需要对本地功能模块做更改,所有的窗口调度与管理都由AppFramework完成。即便是在同一个功能模块内也无需直接内部调用,除非这些模块并不打算对外开放使用,否则都由AppFramework的WindowTask统一管理创建。因此您不管是基于何种语言和在那些地方使用,您都只需要简单的一行代码完成对来自不同模块的功能调度并传递参数。
在Windows平台上程序提供X86和X64两个版本,这是截至目前位置唯一支持纯64为的通讯平台架构。
上图描述了客户端开发模块功能结构与依赖规则。从严格意义上讲 KernelEngine是客户端所有功能的基础内核。有关这些结构模块的详细提供功能请参阅1.11
1.11[客户端模块]
KernelEngine[客户端内核提供程序模块]
1. 本地用户控制器[Local User Controller]:本地用户控制器,此控制器包含所有本地用户操作以及本地用户头像加载信息读取,获取好友数据。同时本地用户控制器还提供了本地用户数据创建与检索的任务,根据配置管理提供的用户配置创建用户目录和临时目录以及创建用户本地数据。
2. 远程用户控制器[Reome User Controller]:远程用户控制器,此控制器提供用于从iMessenger远程服务器上同步数据和更改远程服务器用户信息。以及在本地用户发生更改时通知远程友好用户以刷新状态或数据。首次登录或友好用户信息数据发生更改时从远程服务器获取最新的用户数据并同步到本地用户控制器然后写入本地数据。
3. 配置管理[Configuration]:配置管理包含全局配置和用户配置以及功能配置三个部分
4. 加密管理[Encrypt Engine]:提供多种加密算法,包含完全自主的宽字符对称加密算法。
5. 消息控制器[Message Controller]:来自远程服务器的中转消息都将进入此控制器然后被会话控制器分类和传递给目标功能模块
6. 会话控制器[Session Controller]:提供本地会话管理支持,维持本地与远程的中转和点对点会话。
7. 网络控制器[Network Controller]:来自对Boost的Asio的封装,提供稳定高效的客户端网络自适配,这是所有客户端网络功能的底层控制器。
8. Xml解析引擎[Xml Engine]:KernelEngine内部使用了Xml作为系统全局和应用配置,此引擎提供用于KernelEngine内部配置适配管理。
9. Xmpp自动适配层[Xmpp Engine]:即使我们目前没有在PC上直接使用Xmpp,但是我们依然为此提供了功能强大的Xmpp引擎供二次开发使用。
10. 线程与网络协议栈[Thread and Protocol],提供强大的本地线程池管理和多种协议支持。Sip协议支使其轻松开发出网络呼叫应用。本地浏览器协议支持使其最大可能的将自己的应用部接口部署在Web上。
11. 本地数据访问控制器[Local Data Controller]:提供本地数据库访问,修改等操作。
12. 推送消息管理器[Message Push]:提供本地消息推送管理,来自第三方服务器的消息推送将被按照指定标识推送给目标接受程序。这些程序可能是第三方自定义程序。
13. 本地数据库引擎[Sqlite]。此数据库引擎限于内部操作使用,即便在丢失外围组件的情况保证维持程序的稳定性和容错性,由于本地程序的数据创建与检索都由KernelEngine完成,因此在内核引擎内部使用内置的数据库引擎。对于外置模块可使用外部提供的Sqlite操作。如果是.NET开发者需要额外的本地数据操作支持则表示还必须获取System.Data.Sqlite组件。
KernelUtil模块[客户端内核辅助模块]。提供播放器和客户端一些辅助功能,比如热键管理,注册和自定义配置。
KernelBaseApi模块[客户端二次开发Api模块]。此模块仅对内核引擎的二次开发做了安全封装
KernelBaseUser模块[客户端用户适配层模块]。提供用于客户端用户信息管理的接口程序模块
KernelUiBase模块[客户端用户界面基础模块]。提供用于客户端公共界面的管理模块,KernelEngine显式调用了此模块以创建提醒界面。
AppFramework模块[客户端应用程序框架]。官方应用从这里初始化,官方程序功能调度管理框架,此模块同时隐式调用KernelEngine与KernelUitl和KernelUiBase。与此同时显式调用所有官方本地功能模块,并提供这些模块的调用接口。因此二次开发如果要调用官方功能并传递参数只需要调用AppFramework提供的接口即可,从而大大简化了程序开发。
AppNetRouting模块[客户端NET平台路由模块]。将客户端所有本地内核接口与框架接口进行数据转换。此路由同时调用KernelBaseApi,AppFramework,KernelUiBase。并且这些模块本地C++数据转换为ATL支持的数据格式,这样做的目的是防止内核接收数据丢失或无法识别。
AppILFramework模块[客户端中间语言框架]。基于VC.NET的托管应用程序提供框架。调用AppNetRouting以完成从托管语言到非托管语言的互通。此框架封装了所有非托管下的应用程序接口,包括对官方功能调用和数据获取以及写入。
AppPlugsFramework模块[客户端应用程序扩展框架]。提供客户端本地语言插件服务支持的框架
AppPlugsILFramework模块[客户端中间语言扩展框架]。提供客户端中间语言插件服务支持的框架
AppResource模块[客户端公共资源模块]。提供客户端公共资源共享与存储
以上是内核模块功能与介绍。下面为应用程序介绍
iMessenger[非托管客户端程序实例文件]。提供非托管程序的初始化工作,由AppFramework初始化
iMessengerILHost [托管客户端程序实例文件]。提供托管程序的初始化,由AppILFramework初始化
iNews [客户端弹出迷你新闻程序]。提供弹出迷你新闻页和广告页,不可直接双击启动,需要通过框架传递参数并启动。
iMessengerShell [客户端外壳程序]。第一次使用必须由此启动,后期启动根据配置启动是否为托管
iUpdate [客户端升级程序]。从互联网获取最新版本的程序和附加组件,不管这些组件是否由官方开发,只要在官方网站上提供的都会更新。
以上为程序文件介绍,以下是官方开发部分功能模块文件与介绍:
LoginPanel [登录模块]。客户端官方提供的登录程序,由AppFramework调度管理
MainFrame[主框架]。客户端官方提供的主框架,提供用于客户端本地应用管理,Ui设置,联系人,群组,频道查找,用户与群,频道信息管理查看。以及当前登录用户头像设置等功能。部分调度内置,公共部分由AppFramework调度管理,可供任何第三方程序和二次开发调用。
ChatFrameApp[会话框架]。客户端官方提供的个人会话程序模块,提供了多种会话模式,临时会话和标准会话,其中临时会话提供三种状态,来自群组和频道为一种,来自网页是第二种,来自用户查找为第三种,当选择的用户不是自己的友好用户时AppFramework会自动调用临时会话,此模块对外接口由AppFramework调度管理。
MettingApp[视频频道框架]。客户端视频频道框架,提供了多人视频功能支持,此模块只提供框架,支持内置应用模块的支持,允许开发者自定义开发功能模块,除了多人视频之外官方提供部分内置功能模块,比如协同浏览,投票,白板,讨论,部分功能可能需要付费,此框架对外接口由AppFramework调度管理,对内开放接口Api,以提供内置应用接入。
GroupApp[群会话框架]。客户端群会话支持模块,提供讨论组与标准群会话模式,对外接口由AppFramework调度管理,内置语音朗读功能。
AvSettings[音视频设置]。客户端音视频设置模块,由AppFramework调度管理。
ConfigCenter[设置中心]。客户端用户配置中心,提供全局配置以及用户配置同时支持第三方配置管理,全局配置更改后将影响所有用户,由AppFramework调度管理,可通过参数表示要打开的页面。
MsgHistory[历史消息管理器]。客户端用户消息记录模块,包含所有消息记录,由AppFramework调度。
MsgBox[通知与未读消息]。客户端未读消息管理器与通知中心,由AppFramework调度管理。
以上为官方功能模块介绍,如果安装时选择只安装内核则除了Appmanage功能之外将不安装上面任何一个,此时可完全使用自定义客户端程序。
说明:服务器使用多维度数据以提升效率和简化功能开发和提升数据通用性以及易用性。在客户端则不这样提供。客户端由内核引擎创建的数据包含用户信息数据库库,用户消息记录数据库,用户消息扩展记录[包含系统消息],用户自定义设置数据库[目前版本以Xml形式提供,新版本可能会以Db形式提供]
1.2[客户端框架]
客户端框架是客户端功能模块的容器,在这个容器内所有的功能模块通过框架容器提供的接口Api互相访问和传递参数。此框架包含本地框架和托管语言框架。其中本地框架接受任何支持DLL的语言调用,而托管语言框架则只能被支持的语言调用,但是大大简化了托管语言的开发难度。
1.21[客户端框架]
客户端本地程序框架为AppFramework,提供程序为AppFramework.dll。其结构如下
1.2.2[客户端中间语言框架]
客户端中间语言程序框架为AppILFramework,提供程序为:AppILFramework。其结构如下
AppILFramework与本地程序不同的地方在于,本地程序的AppFramework只提供调度管理,对于数据处理和管理则由程序直接调用对应的提供程序模块接口。并且在调用后直接操作内核数据。而AppILFramework则是从底层经过多重路由后将所有的调度与数据操作全部封装在AppILFramework中。最后开发者引用AppILFramework从中取得AppILFramework中的命名空间与类定义。通过定义取得内核数据与AppFramework的调度管理来操作C++的内核数据和本地应用程序框架调度,这最大程度的实现了本地程序功能与托管程序功能的互通性。一行代码即可完成对本地应用程序框架功能的调度,大大降低跨语言操作的复杂性,同时提升执行效率,并降低不可控因素。
IL功能完成后向上级路由一层一层返回数据或者,向上级路由请求函数响应以调用本地功能,类似操作系统工作模式,因此在ILFramework下性能要偏低与本地框架,因为中间经过多重路由。并且数据取出和函数响应时通过AppILFramework调用AppNetRouting从本地框架和内核中取出以及响应,响应之后要发送数据或写入数据再通过AppILFramework调用AppNetRouting操作本地内核与框架以写入或更新数据。在经过此类多重路由
后性能将降低。
1.2.3Functional[客户端功能]
客户端除了提供强大的开发者框架之外。与此同时我们提供了功能强大的应用模块。这些功能最初的定义为下:
多类型登录,支持从第三方直接传递登录数据然后启动登录。
强大的主框架,完全显式链接的主界面框架,提供了头像更改,联系人资料更改、查看。强大的查找联系人、群组、视频频道功能。本地应用管理让您非常方便的管理本地应用安装卸载。以及各种应用的关系或联系人列表。同时提供了天气支持功能。
提供联系人会话功能,包含视频通话;语音通话;视频留言;录像;语音留言;录音;窗口抖动;文件发送;表情,离线文件;网络共享;远程桌面。在非友好用户状态下部分功能无法使用。允许从Web启动会话。
提供群会话功能,包含多人视频通话;多人语音通话;视频播放;录像;语音留言;录音;群文件共享;发起临时会话。允许从Web启动会话。
提供多人视频会话功能,最多包含64人视频通话;多人语音通话;视频主播;录像;录音;文件协同浏览;网络协同浏览;投票;电子白板;桌面区域共享;发起临时会话。部分功能由内置插件提供。
功能强大的配置中心,程序最大可能的允许自定义设置。每个用户可以可以为自己保存对应的设置,系统设置中心模块提供了功能强大的设置配置,除了允许设置系统本身配置之外还允许通过配置读取第三方应用的配置设置。
消息管理器支持,支持历史消息记录管理,系统通知管理,未读消息管理。
有关更多详细功能,请在产品推出后查看SDK文档。
1.3 Security[客户端安全]
客户端使用了多种加密方式和程序验证来保证用户数据的安全。多数敏感数据在内核中使用静态数据并加密,对于第三方开发者开发的功能扩展要操作某些涉及隐私或高权限的函数则需要对应用签名否则无法执行这些程序。
对于用户配置和本地数据我们都使用了DES对称加密,这是一个全新的DES算法,我们针对宽字符做了优化了处理,无论是中文还是英文都能有效加密,从而保证用户数据安全。
网络传输过程中我们同样使用对称加密算法对数据加密,因此在网络中传输的消息数据即便被截获也无法取得明文数据
1.4 [客户端扩展]
客户端扩展功能标识非自定义的独立功能模块,而是建立在现有功能模块基础之上的扩展模块。在本地平台上该模块管理由AppPlugsFramework提供,这些模块提供了针对某个模块或功能的扩展开发,并且通过应用管理显示出来,在应用管理中启动这些扩展功能。这些功能都是热启动,可以随时安装或卸载,安装后根据配置文件载入到应用管理器中。
托管平台上的扩展管理模块为AppILPlugsFramework此模块依赖于AppILFramework需要.NETFramework 4.0的支持方能正常工作,由于本地应用管理器无法加载托管的应用模块。所以如果要使用基于IL的应用,则程序必须从托管的启动实例初始化,然后加载ILAppManage,这是中间语言平台的应用管理模块,能够管理IL下的所有安装功能。在ILFramework下您使用托管的应用实例,除了可以使用所有的ILFramework功能之外,还允许您调用和使用本地安装的功能模块。但在本地平台上您将只能使用非本地程序框架提供的功能和扩展功能。
总上所述,如果要使用更多的功能和更方便的开发,则您必须安装.NetFramework 4.0,然后您就可以使用C# VB以最简单的方式创建应用。在托管平台上你可以使用到尽可能多的功能应用,而在非托管平台上则会受限较大。
1.5 [移动客户端]
由于新版本系统的架构的多态性,在移动平台上开发也相对简单。我们会针对IOS和Android开发相对的提供模块供Android和IOS上的用户开发和扩展自定义功能。为了保证安全内核提供程序可能不会对外开放源代码,但官方提供的功能模块在手机上将对外提供代码。
针对不同的平台我们将提供不同的SDK支持。这使得软件拥有更多平台的支持和扩展。
1.6 [客户端Web支持]
WebApps支持是指软件提供自定义Web协议,允许从Web页面调用本地程序。
除上述内容之外,我们在将来还将提供基于WebService的Web通讯框架服务,这表示在将来开发者不但可以使用基于桌面的功能开发通讯程序,同时方便使用WebService中的接口将通讯功能签入到网页中,直接在网页中会话,而不必安装客户端,但对于更多强大的功能则必须依赖于桌面或移动客户端的支持。
1.7 [客户端开发]
我们一再的强调iMessenger新版本将开发者纳为第一个目标用户群体,这表示软件有着非常丰富的接口和开发者支持。
这些支持包括跨语言的开发文档与SDK提供文件,官方示例代码和Demo。以及联机电子文档和本地安装的帮助集合,这些将使您开发出最适用于自己的软体功能。
目前我们支持使用C和C++以及NET平台上的所有语言作为开发语言,并且为这些语言提供了统一的接口集和框架集。
1.7.1 Functional Expand[客户端功能扩展]
客户端功能的扩展是我们架构之初优先考虑的因素之一,这里的扩展不单单指基于现有功能模块的扩展开发,而是指在这个平台上所有支持的功能开发,包括但不限于以下部分:
1、基于AppFramework的本地客户端功能开发。AppFramework封装了所有来自官方的功能调度与管理封装。开发者通过使用本地开发语言调用KernelBaseApi和KernelUiBase以及KernelBaseUser以访问和获取内核数据和操作,通过AppFramework与本地官方功能对接,可自由的调度官方提供的功能,并对其传递参数。此类开发只针对本地框架下的功能和扩展有效,您可以使用本地框架和内核开发出高效灵活且功能强大的功能模块,或现有的功能模块扩展程序。安装时这些数据将被安装了Foundation下。由AppFramework的AppManage管理和维护以及调度。AppFramework下的应用无法调用托管框架中的功能模块
2、基于AppPlugsFrameWork的插件功能开发,这些插件拥有独立的功能,安装后安装在PlugsFoundation下。不同于前者的是,这些插件由PlugsManage统一管理,无法提供在主界面或者其他地方显示。插件必须提供统一的接口效验函数,而扩展功能模块则允许使用自定义入口点。本地插件无法调用托管插件功能
3、基于AppILFramework的托管语言功能开发。AppILFramework是针对NET平台下所有接口集和框架集封装的中间语言框架集。其上级为AppNetRouting。AppNetRouting提供了将本地语言框架与内核的数据转换作用,使其在NET平台上有着最佳的数据安全性和最低的数据损坏和不匹配保障。AppILFramework不光提供了来自AppFramework的本地功能框架的接口封装,而且封装所有本地内核与辅助模块的接口封装,例如热键,内核数据访问,修改,操作等等的。是一个完全开放接口的NET平台框架集。使用此框架集您可以完全自定义的开发出基于NET平台的扩展模块。如果您不打算使用我们提供的本地功能,那么此框架则允许您开发完全自主的基于NET的客户端。并且允许调用本地客户端功能
4、基于AppILPlugsFramework的托管语言插件开发。这些插件同样拥有独立的功能,安装后在ILPlugsFoundation下。与AppILFramework不同的是他们必须有统一的插件接口,并且有ILAppManage统一管理,这些插件功能允许调用本地的功能模块和扩展程序。
1.7.2 Custom User Interface [客户端自定义Ui]
我们将用户界面与功能模块100%的分离,这表示即便您不懂任何开发技术,只要您能看懂UI属性和会切图您就可以完全自定义的设计软件界面。这些界面模块仅限于官方提供的功能。第三方界面方案由第三方提供。我们以图文的形式向您说明UI自定义的简便性
下图为提醒对话框运行效果图:
在设计视图中允许用户对其完全自定义,包括布局,样式图标;设计视图如下:
只需通过简单的鼠标拖拽和属性更改即可完全颠覆Ui风格。功能-空前强大,自由-一如既往。
1.7.3 [自定义客户端开发]
我们提供了客户端内核引擎和对外接口,这表示,如果用户不希望使用官方提供的主程序,那么您可以自定义开发属于您的主程序或其他功能,即便如此我们还是允许您调用官方提供的功能模块。
在本地平台上您可以使用QT,MFC,Win32SDk,VB,Delphi,BCB来开发应用程序或动态库以实现自定义功能应用。在托管平台上您可以使用VC.NET ,VB.NET, C#.NET来开发托管语言的功能模块。本地平台应用无法直接调用托管平台模块功能,但是托管平台可以调用本地平台功能。
下面我们给出简单的示例代码和运行效果图。
本地平台以MFC为例。
技术点如下:您在使用前必须包含下列头文件和导入库
#include<AppFramework.h>
#include<KernelEngineInc.h>
#pragma comment(lib,"KernelEngine.lib")
#pragma comment(lib," AppFramework.lib")
然后您就可以直接写功能代码了,比如在一个按钮单击消息函数中写入ShowAbout();
执行结果:打开关于对话框。
或者写入下列代码:
ShowTrayTipWnd(_T("1001"),_T("来自通达OA的消息通知"),_T("你的电脑快爆炸了"),NULL,_T("查看"), 1, NULL);
只需一行代码弹出通知窗口并指定显示的选项。第一个参数为消息ID,第二个为消息标题,第三个为消息正文,第四个为消息正文Http连接地址,通过通过单击消息文本或查看按钮打开链接页面。第五个参数为执行按钮上要显示的文字,第六个参数为显示的按钮选项,1表示显示两个按钮,2表示显示三个按钮,0表示显示一个按钮。最后一个参数标识要显示的时间,以毫秒为单位,一般为15000,如果为NULL则一直显示。
执行结果:
以上是针对本地UI功能模块的开发调用,那么如果不调用界面模块只需读取数据呢,MFC中获取内核提供程序版本和当前登录用户文档目录的示例代码如下:
CString strKernelEngineVersion, strKernelLoginUserPath;
strKernelEngineVersion = GetKernelEngineVersion();
strKernelLoginUserPath = GetLocalLoginUserFilePath();
之后您可以将strKernelEngineVersion用在各种地方用来显示内核版本,和在其他需要获取当前用户工作目录的地方使用strKernelLoginUserPath例如,当然您也可以直接使用GetKernelEngineVersion();和GetLocalLoginUserFilePath();来直接赋值以简化代码。比如我们在弹出消息中显示版本和文档目录,那么代码如下:
AfxMessageBox(GetKernelEngineVersion());
AfxMessageBox(GetLocalLoginUserFilePath ());
执行效果如下:
是使用上面示例之前部分功能需要登录后才能使用,比如获取当前用户的工作目录。在本地平台上登录也异常简单,在MFC下同样是一行代码。
示例如下:
int iLogin;
//KernelEngine_UserLogin中的第三个参数为帐号类型,赋值范围为0-2,第四个参数为登录状态,赋值范围0-5.
//KernelEngine_UserLogin中的的正常返回值为123,分别标识成功,帐号不存在,密码错误三种状态
iLogin = KernelEngine_UserLogin(_T("登录名"),_T("登录密码"), 1, 1);
if (iLogin== 1) //返回值等于1登录成功
{
//在这里写入登录成功后的执行代码
}
elseif (iLogin = 2) //返回值等于2表示用户不存在
{
//在这里写入用户不存在时要做的操作
}
elseif(iLogin = 3) //返回值等于3表示密码错误。
{
//在这里写入登录密码错误时的操作
}
else
{
ShowMessageBox(_T("遇到未知错误"),_T("您的登录请求失败"),NULL, 1,MB_OK);
}
登录成功后就可以正常调用AppFramework和内核中的接口函数以及功能调度。
关于本地二次开发调用接口我们只是简单的举个例子,就说到这里,下面了解一下IL平台上的开发示例。
我们允许您使用NET上的语言开发功能,以C#为例,我们首先要做如下的工作,为项目添加AppILFramework的引用,并且在头部申明命名空间
using AppILFramework;
所有的内核与框架接口我们都在AppNetRouting转换,所以我们需要将AppNetRouting实例化,代码如下:
AppNetRouting appNetrouting =newAppNetRouting();
然后我们就可以在C#中使用这空前强大的功能了。我们以托管功能与本地功能交互为例子来实现一个功能。前提是部分功能必须登录后方能使用,那么我们用C#创建一个登录窗口并为其写入如下代码
string strLoginName, strPassword;
strLoginName = comboBoxLoginName.Text.Trim();
strPassword = textBoxPassword.Text.Trim();
//comboBoxLoginName是登录窗口上的用户名输入与选择控件的名称
//textBoxPassword是登录窗口上的密码输入控件
if(appNetrouting.KernelBaseApi_UserLogin(strLoginName, strPassword,1,1)==1)
{
//当AppILFramework中的appNetrouting.KernelBaseApi_UserLogin返回1时表示登录成功
DialogResult =DialogResult.OK; //对话框返回OK
this.Close(); //关闭登录窗口
}
这里不用担心传值和保留信息等操作,只要返回值为1关掉登录即可,所有复杂的操作我们都为您做好了。
登录窗口效果图如下:
注意,内核默认使用密码强制策略,除非特别定制,否则密码长度不能低于8个字符,如果密码长度不符合这一安全策略则内核弹出警告并返回错误值。
这个错误提示由内核维护,但是为了程序更高效的执行,建议将长度约束写在功能模块中判断。
登录成功后主界面如下:
其中获取用户登录名和登录时间以及头像的代码如下:
labelUid.Text = appNetrouting.GetKernelBaseApi_LoginUid();
pictureBoxUserFace.Image =Image.FromFile(appNetrouting.GetLoginUserFaceBigImg());
labelLoginTime.Text = appNetrouting.GetCurrentKernelBaseApi_LoginTimer();
从以上代码可以看出,我们将二次开发最大可能的简化。并且支持跨语言。
除此之外我们允许托管语言调用本地功能模块,比如我们设计一个窗口如下:
实现代码如下:
string strId,strTitle, strContext, strWebUrl, strBtnView,strTimer;
strId = textBoxIds.Text.Trim();
strTitle = textBoxTitle.Text.Trim();
strContext = textBoxContext.Text.Trim();
strWebUrl = textBoxUrl.Text.Trim();
strBtnView = textBoxBtnView.Text.Trim();
strTimer = textBoxTimer.Text.Trim();
int iTimer,iType;
iTimer =int.Parse(strTimer);
iType = comboBoxType.SelectedIndex;
//调用本地功能的函数只需要下面这一句代码即可完成。
appRouting.ShowTrayTipWnd(strId, strTitle, strContext, strWebUrl, strBtnView, iType, iTimer);
然后我们单击发送按钮来看看执行效果
综上所述,我们的最复杂的事情变得最为简单,让小学生都能写出功能插件,这一切从未如此简单过,而今天我们正在将其实现。我们为系统提供了数以万计的接口Api满足各种不同的需求的开发。
1.8 Details Information[客户端详细信息]
首先从iMessengerShell说起。为了保证我们的程序不受操作系统更改的影响我们将所有配置均写在Config中,iMessagerShell运行时会检查并更新这些目录配置,以及检查本地计算机是否安装了目标平台的IL框架,如果安装,则程序从iMessengerILHost.exe启动,此为托管模式,虽然启动时同样调用了本地应用模块,但其实例为托管模块从AppILFramework初始化。否则程序从iMessenger.exe启动,这是本地程序模块,拥有最佳的执行效率和灵活性,从AppFramework初始化。
下面我们来看一些客户端程序的截图:
消息提醒
主面板天气
未读消息管理器
主面板资料
联系人查找
系统设置
音视频设置
群会话
注意,这里的A表示群创建者用户,M表示管理员用户,目前此List尚未处理。后面M列表示头像列
视频频道支持
客户端IL应用管理器
关于客户端的介绍就到此为止。
2、Server简述
Server=服务器,最新版本只能运行在Windows Xp以及以上版本的系统上。32位的服务器版本可运行在个人系统上,64位的服务器版本则只允许运行在Windows Server 2008或更高的64位Windows服务器系统上。
服务器引擎与框架使用非托管的纯C++编写,基于多态与跨语言的开发架构允许其最小化安装.对于功能应用用户可以在使用时根据需求从网络上获取。
最大的可伸缩架构使客户端程序拥有最强大的伸缩功能,全显式链接模式支持功能即插即用。于此同时服务器同样提供了功能强大的SeverILFramework支持,这使得服务器扩展功能可以用任何支持的语言来开发,如果开发者想用由我们提供的功能,则还可以使用ServerFramework提供的接口来调用官方的服务器内核功能与本地HostServer功能,服务器扩展从未如此强大过。
服务器采用了类操作系统架构,所有的服务器通过HostServer启动,由ServerFramework统一维护。服务器需要通过命令或我们提供的本地服务器配置工具安装,卸载以及更改配置,然后根据HostServer启动参数从ServerKernelEngine中获取当前服务信息之后由ServerFramework中的ServicesModule统一管理。
服务器程序不同于客户端的是,更高的稳定性要求,更好的安全系数。并且服务器基于分布式架构。因此无法基于现有服务来开发加载项或扩展,因此我们为此专门提供了组件服务和托管程序。基于组件的服务的功能扩展您可以忽略掉基于HostServer的宿主服务开发的复杂性,因为在组件服务的接口中为您提供了最简单的网络推送和接收接口,只需要按照规则开发出简单的DLL模块即可被组建服务一次性加载,并且加载是基于多线程的,因此您不用担心会被阻塞。
对于需求不高的服务器扩展完全可以基于组件服务[ComponentService]完成,而对于高要求的则需要开发单独的服务器功能模块并由HostServer启动或完全基于内核开发出自己的服务器程序,这一切从未如此开放-自由,因此空前强大。
于此同时服务器程序为开发者提供了强大的打包和签名工具,并且允许备份当前服务器设置和数据,这一切都是如此简单且行云流水。打包后的的服务器功能安装包可直接安装到本地服务器,我们最大可能的简化服务器的部署与配置。从而最大可能的降低维护成本。
2.1 Architecture[服务器架构]
服务器程序架构较为复杂,但对于二次开发相对简单,在结构图中不在做详细的描述注释。
2.1.1 [服务器模块]
ServerNetworkKernel[服务器自适配网络引擎内核提供程序]一切与网络相关和与线程池连接池相关的适配层封装都在此提供程序模块中。
Server_Htbp[服务器超文本多播协议适配器]服务器超文本广播,多播协议栈适配层
Server_ NetRequest[服务器网络请求反应器]服务器网络应答反应器提供程序模块
Server_RMCast[服务器网络多播反应器]暂无简介
Server_TMCast[服务器程序网络组播反应器]暂无简介
ServerKernelEngine[服务器内核提供程序模块]
1. 应用程序池控制[Application Pool]:提供本地服务器多进程管理以及LPC和RCP功能。
2. 应用商店用户控制器[Appstore Controller]:在未来提供iDevelops上的开发者控制支持,部分开发者功能必须通过此控制器验证后方可继续,例如给安装包签名,获取程序签名等操作。
3. 服务器配置管理器[Server_Configuration]:提供本地服务器的全局和服务配置更改的操作支持。
4. 缓冲池[Cache Pool]
5. 连接池[Connection Pool]
6. 本地数据库引擎[Sqlite]:服务器数据并不依赖于Sqlite,但是本地相关配置则依赖于Sqlite,因此本地服务器引擎被内置在服务器内核引擎中。
7. 服务器授权控制器[License_Controller]:所有本地服务器首先管理,效验,更改都被封装此控制器内。包括网络效验,USB设备效验,以及本地文件key效验工作都由此控制器提供
8. 服务器日志控制器[Logs_Controller]:支持多种日志输出,并提供接口。例如用户日志,管理员日志以及服务和其他日志。
9. 消息控制器[Message Controller]:提供客户端消息推送与接受管理
10. 网络适配控制器[Network Controller]:封装上层服务器自适配网络提供程序上层接口
11. 安全管理[Security Controller]提供多大六种的加密与解密方案,其中对称算法支持宽字符加密与解密。并对开发者提供接口。
12. 会话控制器[Session Controller]:提供客户端与其他服务器消息的管理与投递控制。
13. 线程池管理[Thread ]针对服务器程序的多线程自动分配与管理,如果启用多进程,当线程达到或接近配置线程最大峰值时将自动通知应用程序控制器以创建新的进程。
14. 用户控制器[User Controller]:基础用户控制器,包含用户数据,状态,请求交换。
14. Xml引擎[XmlEngine] 服务器内核内部使用了Xml作为系统全局和应用配置,此引擎提供用于ServerKernelEngine内部配置适配管理。
ServerKernelBaseApi [服务器内核对外Api集]暂无简介
ServerFramework [本地服务器框架集] ServerFramework类似于客户端的AppFramework,不同的是ServerFramework并不提供独立的功能模块调度,而是提供统一的HostServer接口并加载统一的模块并由指定的接口启动,因此二次开发中的基于HostServer的服务模块不可调用此框架接口。而外围的非服务模块则允许调用,每个HostServer只允许加载一个服务主模块。
ServerILFramework [托管语言服务器框架集] ServerILFramework类似于客户端的AppILFramework,与客户端不同之处在于,ServerILFramwork并不完全针对服务器内核进行跨语言路由封装,而是只封装部分常用函数,由于服务器程序不同于客户端。每个服务都是跨进程访问与操作,因此无需完全基于ILHostServer来启动。这表示在服务器上,本地服务可以调用ILHostServer下的服务,而ILHostServer也可以调用HostServer下的。在客户端本地应用是无法调用托管应用的。
ServerNetRouting[服务器中间语言路由提供程序]提供用于服务器内核与ServerILFramwork之间的路由中间件。
ServerKernelUtil[服务器内核辅助模块]提供用于Windows功能辅助,注册表操作简化功能。
ServerClusterEngine[服务器群集引擎] ServerClusterService的依赖项,提供用于管理本地与远程服务器角色匹配,信息互通的功能。
ServerAppstoreLibrary[服务器联机功能获取模块]暂无简介
ServerDatabaseEngine [服务器基础数据访问引擎提供程序]包括针对不同数据库引擎的访问控制器和不同数据库引擎的数据访问层。
ServerMainLibrary [服务器管理程序主模块]提供本地服务器管理工具的操作接口。与远程管理服务器的服务接口。在远程服务中此模块作为HostServer启动ServiceMain用于远程连接管理,在本地则导出接口供本地命令行管理程序调用并输出命令行。
以上模块为服务器内核与框架提供程序模块,对于其他服务或扩展模块则有官方或用户自定义开发,其中包括下列两个持久服务模块
HostNetworkServer[本地服务器网络主机服务]提供本地服务器所有网络入站出站服务
HostDatabaseServer[本地服务器数据库引擎服务]提供基础数据库访问服务
2.2 Server Shell[服务器外壳]
为了保证服务器程序的易用性和容错性我们将所有配置均写入在服务器安装目录的配置目录下,程序初次安装后由于这些配置为空所以必须运行ServerShell来对新的安装设置配置。
配置之后将不需要在重新运行ServerShell,此程序只对第一次安装或服务器安装目录发生更改时有效。如果您移动或更改了服务器安装根目录位置,则运行ServerShell重新初始化安装即可。我们将易用性发挥到极致。
2.2.1 Server Drive[服务器驱动]
此版本服务器出于安全考虑加入两个个驱动程序以保证服务器程序的合法性和安全性。
ServerNetLicense是服务器网络授权验证驱动,随着Windows的启动而启动,随着Windows的关机而终止,不允许手动结束,从而保证服务器授权的安全和合法。
UshieldDriver是Usb授权设备驱动程序,配合Usb Key一起使用,对于不想使用或无法使用网络激活的用户可以通过购买UsbKey来激活服务器授权。
在2014年的RC版本这些驱动会随着一起发布并且提供Windows 7和Windows8的驱动程序。但是这些驱动程序并不会在Rc版本中起到实际用途,因为我们可能无法按时完成网络授权服务器端。当RTM发布后这一功能可能会被实际应用,实际应用后服务器程序的本地授权将无法部署在Windows7以下的操作系统上。
2.3 Server Framework[服务器框架]
服务器框架不同于客户端框架,他并不提供服务器功能模块调度,只是对服务器HostServer做了模块调用接口。服务器框架接口较为简单提供了服务安装,服务打包,服务启动,服务初始化,服务卸载。部分接口可能需要提供身份验证。
2.3.1 Server Local Framework[服务器本地框架]
框架为ServerFramework,提供程序模块为ServerFramework.dll
2.3.2 Server Intermediate language Framework[服务器中间语言框架]
托管服务器框架为ServerILFramework,提供程序模块为ServerILFramework.dll,结构图如下:
2.3.3 Host Server[本地服务器托管]
HostServer是本地服务器托管程序,其结构非常简单。开发者可以使用ServerFramework开发自定义服务器程序。HostServer有两个模式[控制台模式和服务模式],但这两个模式都是由ServerFramework自动适配,并且由编译器设置自动匹配。编译的程序为Debug版本时HostServer输出为控制台程序,当编译程序为Release时HostServer以Windows服务方式启动。Debug模式下会输出服务器详细信息,因此效率会偏低,但是可以监控所有服务器数据。
HostServer启动时可以传递两个状态的参数来决定是启动本地服务或者启动本地服务器扩展,本地服务器可能无需依赖其他服务项,而服务器扩展则表示有依赖项和较低的行为权限。这些参数在作为服务安装时被写入到注册表配置中,因此在debug模式下必须手动输出全部参数方可正确执行,否则程序会一闪而过。适用于本地服务的启动标识符是”- ”,此参数作为启动参数标识时从ServerFramework的ServiceStart函数初始化服务,在ServiceModule中从ServiceModuleInit加载服务功能,参数示例如下:
E:\Develop\iMessenger2\Server\Build\X86\Debug\Binn\Hostserver.exe -HostNetworkServer
适用于本地服务扩展的启动标识符是”#“,此参数作为启动参数标识时从ServerFramework
的ServiceExStart函数初始化,在ServiceModule中从ServiceExModuleInit加载服务功能,参数示例如下:
E:\Develop\iMessenger2\Server\Build\X86\Debug\Binn\Hostserver.exe #TestServer
2.3.4 Intermediate language Host Server[中间语言服务器托管]
ILHostServer是本地服务器中间语言托管程序,由于本地服务器托管程序无法加载中间语言服务器模块,因此ILHostServer构非比较复杂。并且ILHostServer只能加载一种状态的服务,即本地服务器扩展,并且这些服务器功能必须是基于ServerILFramwork的。
ILHostServer是一个使用C#编写的Windows服务程序,拥有服务器程序的所有特征和控制器。启动时根据传递的参数从ServerILFramwork中匹配加载的功能模块。因此他并不使用ServerFramework中提供的任何服务控制接口。
与本地服务相同的是,他们在使用过程中模块都要与ServerFramework验证和匹配信息,如果失败ServerFramework将终止这个服务。这些维护与中间语言框架无关,只是通过接口与本地服务器框架和内核互通然后效验中间语言的合法性,这样的考虑是出于中间语言程序的易破解性会带来模块安全问题所致。
ILHostServer会一次性加载多个服务模块,并以多线程形式为每个服务开辟新的地址,因此他并不是多进程和多服务,如果要创建额外的服务支持则需要自己开发NET服务,开发者可以完全使用ServerILFramwork提供的功能接口来完成自己的服务开发。而这一切得益于NET平台的易用性。
不管是HostServer还是ILHostServer都可以在ServerFramework中的服务器控制中启动,删除,修改以及停止。
2.3.5 Server Functional[服务器功能]
服务器除了提供强大易用的开发者框架和服务器程序托管平台之外。与此同时我们提供了功能强大的服务器程序。这些功能最初的定义为下:
HostNetworkServer,功能强大的本地托管网络服务器,一切与通讯有关的服务器近战和出站规则都在此提供。
多维度的服务器数据库支持,和支持多数据库的HostDatabaseServe为MySQL,SQLserver,Oracle Database提供了多种服务。在配置中我们支持数据库连接字符串统一管理,根据连接名获取连接字符串,这适用于所有的数据访问程序调用
以上两个是作为服务器持久服务,不可卸载,不可安装,所有的参数与操作均被封装在内核中。这两个服务可能在其他子服务中要使用。除了上面两个服务我们还提供了以下服务:
注意:由于篇幅和时间有限,对于以下服务的描述信息和功能介绍将不在提供,只提供服务名和简单的描述信息。
MessageService消息服务,提供用于本地服务器的即时通讯服务。
GroupService 群应用支持服务,提供群会话和应用服务
MeetingService支持多播的多人视频通话服务器,同时允许加载扩展模块以增强服务的可用性
FileService文件服务,提供用户文件存储,持久性共享。与各种文件发送接收的服务。
UpdateService客户端更新服务。
ComponentService组件服务,提供服务器组件加载服务。
SessionHistoryService会话记录服务,提供用户消息漫游记录的服务。
2.3.6 ServerMessage Push[服务器消息推送]
服务器消息推送服务这是根据IOS上的墓碑模式引入的新概念,在不更改服务器结构的基础上允许用户对客户端通过消息推送服务发送消息通知等非持久会话的消息模式。
消息推送服务提供了简单的接口,并且支持从任意程序发送通知消息。包括但不限于Web和Desktop。
通知程序包括多种模式,包括以会话形式直接在会话窗口中显示通知或公告,以及托盘提醒。
推送消息不以用户会话模式呈现,均已系统帐号投递。
此功能的主要目的是用于其他系统外部消息发送到iMessenger客户端的功能,比如企业OA,ERP以及网站和论坛系统。简单的举例如果使用此服务,并且在同一服务器上的论坛用户对接后,并且对该论坛程序开发了消息推送服务组件,那么当有一个用户的帖子被回复或者其他操作时,这个消息将被推送到iMessenger显示,并且支持链接。
模式一截图如下:
2.4 Server Security[服务器安全]
由于服务器框架的开放性,所以安全一直都是我们最为重视的。因此我们为服务器程序安全提供了多重的保护,这些保护措施包括但不限于以下内容:
1、 框架与内核版本以及Guid和Token Key效验。我们为每个版本的内核程序提供了唯一并且不同的Guid和Token Key,服务器内核与框架工作时,必须效验这些数据的匹配性,于此同时内核提供模块会效验当前框架与外围提供程序的MD5值,每个版本的以上数据都不相同,因此不可用其他版本的内核提供程序模块或服务器框架模块替换以达到破解的目的,除此之外内部MD5效验也防止了内核与框架被修改。当修改DLL程序数据后MD5将发生改变,改变MD5后的程序模块将无法验证通过从而导致正常初始化失败和终止行为。
2、 操作系统内核驱动模式的网络授权效验和USB设备锁。基于内核驱动的网络授权锁提供用于24小时联机激活的方式保证服务器安全。对于没有网络的用户提供USB设备锁来保证服务器模块安全。
3、 第三方服务器程序模块的签名,我们对RTM版本程序要求使用功能签名。而RC版本针对开发者不需要签名,但RC版本非网络和USB设备授权限制,而是由内核写死授权,无法用于大量并发,并且需要使用开发者ID登录方能正常加载功能模块,对于开发者ID我们需要人工审核。因此这一版本主要用于开发者测试与调试。RTM是对外的最终版本,因此要求功能模块签名,对于未经签名的模块将不正常加载,从而杜绝恶意功能的加载和使用。
4、 服务器配置加密。我们针对服务器所有配置项加密,因此在服务器沦陷之后恶意用户也无法更改配置,在没有提供安全密钥的前提下也无法使用本地配置工具和命令。加密的配置项包括但不限于:持久服务配置数据,数据库连接字符串,宿主服务配置,宿主服务扩展配置,用户配置。
5、 数据库加密,我们针对数据库中的敏感数据同样提供了加密存储的方式以保证数据库数据安全。
2.5 [服务器扩展]
服务器扩展从广义上是指安装在ServiceExpandList下的服务。支持本地扩展和IL扩展。
实际上他们和本地服务一样提供独立的服务器功能,但是他们可能有依赖于上层服务的行为。这取决与开发者的设计。如果开发人员不使用上层依赖,则他们和本地服务并无区别,只是安装位置不同,加载过程与启动时传递的参数不同。
2.6 [服务器集群]
服务器集群由ServerCluster提供,主服务为ClusterService,部署在局域网内一台独立的服务器上,可以与其他服务一起部署,但是其他服务中需要设置ClusterService的相关配置。Cluster的最初架构方案是矩阵散列集群,而非线性,具体目标上在研究。
矩阵散列集群模式下服务是根据角色分配的,每台服务器可以分配一个单独的角色功能,多台服务器可以共同分配这个单独的角色,比如登录服务器,可以将其分配在2台服务器上协同服务服务。消息服务器可以分配在10台服务器上协同服务。
结构如下:
服务器集群目前属于计划阶段。具体实现可能跟文档不同
2.7 Server Management[服务器管理]
ServerFramework提供了功能强大的服务器管理接口,除此之外我们封装了ServerMainLibrary提供用于服务器功能的管理与设置。
ServerFramework中提供了服务控制包括但不限于:服务启动,停止,暂停,重新启动的接口,函数原型中提供了两种模式,第一种为操作所有ServiceList和Expand中的服务,不需要传递参数。对于单独的服务控制则需要传递一个lpszServiceName[服务名]进去。
ServerFramework中提供了服务管理包含服务安装,此函数包括一个参数,即指定服务模块安装包路径。服务器安装路径有内核程序自动维护查找顺序。默认搜索服务器安装根目录下的Service_Install目录,当此目录下无法找到需要的安装包时则从指定的目录查找,如果安装包文件存在于Service_Install目录下则不需要输入全路径,只需要输入安装包文件名即可。安装包内包含安装配置,这些配置都是加密的,读取安装包成功后服务器内核引擎的ServiceInstallConfig会自动读取并解密这些数据并根据配置中的属性安装到指定位置。
与此同时提供了服务卸载,卸载时需要提供服务名,首先从Windows服务列表中删除服务注册,然后从本地服务安装列表中删除安装配置。
ServerMainLibrary中则提供了所有的管理功能,包括数据库操作,服务控制,服务安装与卸载。服务器激活。
这些管理操作一如既往的提供了最简单易用的接口,完全可以自定义开发出更强大的管理功能
2.8 Server Web Service[服务器Web 服务]
服务器WebService是基于ILFramework下的Web接口,提供用于Web客户端和web管理程序的开发,同时提供用于其他web服务和的对接和调度。具体内容不在此详述。
2.9 Server Devlop[服务器开发]
服务器开发是我们主要努力的方向,我们提供了跨语言的开发支持,使得开发者能够使用自己最擅长的语言开发出最适用于自己的服务器功能模块。
有关服务器开发的我们用几句简单的代码来描述
多数服务器程序都是输出控制台的,我们以控制台为例子
setlocale(LC_ALL,"chs");
if ((argc > 1) && ((*argv[1] ==‘-‘) || (*argv[1] ==‘/‘)))
{ServersStart(argv[1] + 1);}
elseif ((argc > 1) && ((*argv[1] ==‘#‘) || (*argv[1] ==‘/‘)))
{ServersExpandStart(argv[1] + 1);}
else{}
以上代码是用来启动ServerFramework中的服务的的,分别表示了本地服务的启动和扩展服务的启动
在调试模式下我们输入-HostNetworkServer运行结果如下:
开发本地服务器时需要链接内核与框架的库文件以及使用LBIS命名空间
#include<iServerFrameworkInc.hpp>
#include<iServerKernelEngineInc.hpp>
usingnamespace LBIS;
#pragmacomment(lib,"iServerFramework.lib")
#pragmacomment(lib," iServerKernelEngine.lib")
然后就可以使用他们提供的API来开发功能了。
以MFC为例,我们需要开发一个服务器安装工具,那么我们引用上面的库文件和头文件之后设计界面如下
代码示例如下:
这些操作较为复杂,因此使用了导出类,而非直接使用Api.在窗口类的class中申明内核的ServiceInstallConfig,这需要包含对应的头文件
#include"ServiceInstallConfig.hpp"
// CServiceInstall
CServiceInstallConfig InstallConfig;
然后在浏览文件按钮的click消息内写入如下代码:
CFileDialog fileDialog =CFileDialog(TRUE,NULL,NULL,OFN_READONLY,
L"Local Install Files (*.inx)|*.inx|Server Install Files (*.insx*)|*.insx*|Expand Install Files (*.insex*)|*.insex*||",this);
if (fileDialog.DoModal() ==IDOK)
{
CString strPath = fileDialog.GetPathName();
m_pEdtFilePath->SetWindowText(strPath); //strPath表示浏览到的安装文件路径,并将其赋值给Edit控件
if (InstallConfig.ReadInstallFile(strPath) == 1) //==1表示服务安装配置读取成功
{
SetInfoShow();//显示服务安装配置数据
}
else
{
AfxMessageBox(_T("读取服务安装包失败,以下原因可能会导致此问题:可能不是有效的安装包文件,或者安装包配置丢失,请检查安装包的有效性"));
}
}
其中SetInfoShow();的代码如下:
CString strType, strILFrame;
strType = InstallConfig.strType;
strILFrame = InstallConfig.strIsILService;
if (strType==_T("Local")){strILFrame = _T("已禁用");}
else{if (strILFrame.IsEmpty()){strILFrame =_T("未配置");}}
while (m_pLstInfo->DeleteColumn(0));
m_pLstInfo->DeleteAllItems();
m_pLstInfo->InsertColumn(0,_T("Item"),LVCFMT_LEFT, 140);
m_pLstInfo->InsertColumn(1,_T("Value"),LVCFMT_LEFT, 400);
int nIndex = m_pLstInfo->InsertItem(0,_T("服务类型"));
m_pLstInfo->SetItemText(nIndex, 1, strType);
nIndex = m_pLstInfo->InsertItem(2,_T("服务名称"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceName);
nIndex = m_pLstInfo->InsertItem(3,_T("服务显示名"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceShowName);
nIndex = m_pLstInfo->InsertItem(4,_T("Guid"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceGuid);
nIndex = m_pLstInfo->InsertItem(5,_T("TokenKey"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceTokenKey);
nIndex = m_pLstInfo->InsertItem(6,_T("描述信息"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceDescription);
nIndex = m_pLstInfo->InsertItem(7,_T("提供程序主模块"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceModule);
nIndex = m_pLstInfo->InsertItem(8,_T("入口点"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServiceEntry);
nIndex = m_pLstInfo->InsertItem(9,_T("启动参数"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strServicestrParame);
nIndex = m_pLstInfo->InsertItem(10,_T("Tcp端口"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strTcpport);
nIndex = m_pLstInfo->InsertItem(11,_T("Udp端口"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strUdpport);
nIndex = m_pLstInfo->InsertItem(12,_T("是否使用IL框架"));
m_pLstInfo->SetItemText(nIndex, 1, strILFrame);
nIndex = m_pLstInfo->InsertItem(13,_T("数据提供文件"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strDatabseFile);
nIndex = m_pLstInfo->InsertItem(14,_T("版权信息"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strCopyright);
nIndex = m_pLstInfo->InsertItem(14,_T("版本"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strVersion);
nIndex = m_pLstInfo->InsertItem(15,_T("签名"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strDeveloperSignature);
nIndex = m_pLstInfo->InsertItem(16,_T("版本语言"));
m_pLstInfo->SetItemText(nIndex, 1, InstallConfig.strLanguage);
最后当我们选择一个有效的安装文件并读取成功后效果运行效果如下:
我们将复杂的部分全部实现,界面操作仅仅是调用接口即可完成功能开发。
以上是本地服务器开发,对于托管语言服务器程序开发函数基本雷同,语法遵循目标语言语法,在此不做赘述。
2.9.1 Functional Service[服务器功能服务]
服务器功能服务开始是指基于HostServer启动的宿主服务模块开发,其实这非常简单,我们提供的默认服务启动入口点只有一个接口ServicesMain。您可以使用自定义接口并将他们写入到服务配置中,我们同样可以启动它。我们定义的默认启动接口如下:
#include"Service_Config.hpp"
#ifdef__cplusplus
extern"C" {
#endif
// Service初始化
// 我们为服务器提供了内部效验,从服务器模块内部效验配置数据是否与模块相符,如果不符服务则无法启动
// 自定义开发的服务可以使用我们约束的接口,当配置中入口点为空时默认使用ServicesMain
// 如果您不计划内部效验配置则不需要参数,如果您计划在模块内部效验配置则需要参数,最多为4个参数
//参数全部为LPCTSTR,分别代表Guid,Token Key,Version,Language,请勿颠倒顺序。
NETWORKSERVICE_APIintServicesMain(LPCTSTR lpszGuid,LPCTSTR lpszToKeny);
}
除了入口点您还必须定义开发者Guid接口和版本号以及内部的GUid与TokenKey接口。这些接口是必须的,不管您是否从内部效验模块,为了安全考虑您必须提供这些数据接口,我们会从安装配置与这里的接口匹配数据,而配置中的数据是加密的,并且这些应用在第一次加载时会联机匹配开发者ID,如果开发者ID下无法检索我们获取的模块Guid和TokenKey则意味着此服务器模块存在安全问题,不予加载。
接口定义如下[接口名称不可更改,类型不可更改]:
//获取当前服务器模块开发者Guid。
NETWORKSERVICE_APILPCTSTR GetServiceModuleDeveloperGuid();
//获取当前服务器模块版本号
NETWORKSERVICE_APIintGetServiceModuleVersionNumber();
//获取当前服务器模块Guid
NETWORKSERVICE_APILPCTSTR GetServiceModuleGuid();
//获取当前服务器模块TokenKey
NETWORKSERVICE_APILPCTSTR GetServiceModuleTokenKey();
对于低水准的开发者也可以使用下列方式导出全部接口
//获取本地服务器开发者Guid
extern"C"__declspec(dllexport)LPCTSTR GetServiceModuleDeveloperGuid()
{
//直接在这里写入功能
}
以上是针对本地服务器功能的开发示例。针对托管服务器程序开发于此雷同,只是加载与启动方式不同
2.9.2 Functional Service Expand [服务器功能服务扩展]
服务器扩展由组件服务器统一加载,不创建新的服务进程,IL下的扩展则由IL组件服务统一加载。同样只有一个默认接口,服务扩展接口目前存在争议,因此不在此文档中列出。唯一可以确定的是每个扩展我们都会为其创建一个新的线程去启动防止阻塞,扩展内部线程由开发者自定义。
2.9.3 [服务器安装包]
服务器安装包包含以下几种格式
1、insx,insx是指本地安装包,安装程序为官方或第三方提供的系统服务安装包程序
2、insex,insex是指扩展安装包,安装程序不创建服务进程,而是附加到组件服务中的功能模块
3、insc,insc不是安装包文件,而是安装配置文件,对于想手动安装的服务也必须创建此安装配置。
安装包安全管理:
服务器安装包打包时必须验证iDevelops上获取开发者账户信息,如果验证失败则不允许打包安装程序。服务器安装包下载安装时会验证当前登录到iDevelops上的用户信息,即便这个用户不是开发者账户同样允许安装,但是在读取安装包信息成功后会从iDevelops上匹配此安装包配置信息以确保安全,如果配置验证通过则继续安装,如果失败则退出安装。
安装包打包,安装。查看信息都是由ServerFramework与内核共同提供接口,因此任何语言都可以调用这些接口来打包和安装。
有关于iDevelops开发者中心在早期版本中可能无法提供,因此早期版本可能存在安全隐患,对于这些隐患的管理与防范主要靠管理员。
2.10 Details Information[服务器详细信息]
详细描述受篇幅影响暂不赘述我们通过图片来介绍部分功能。首先我们来说说强大的本地服务器命令行ServerMain,这是一个本地服务器管理强大的命令工具,启动后执行结果如下:
提供了强大的命令功能以方便管理员查看和管理,比如我们输入ServerInfo,将输出本地服务器所有信息
除了强大的服务器信息输出命令还包括各种操作和修改命令,有关详细请参阅服务器说明文档
下面我们看看本地服务器调试模式下的一些数据
正常模式下服务器启动正常,输出服务器Guid,TokenKey以及相关的信息。最后模块内部效验数据
那么非正常情况下呢比如配置中有服务,但是启动时却发现缺少加载项,那么程序也不会崩溃,而是报告无法找到服务模块提供程序,稳定性是我们的第一追求。
那么如果直接输出的参数在服务安装中没有的也不会报错,返回服务不存在错误。
有关图片参考请参阅下面两图:
上图为服务不存在。
上图为服务正常初始化
除了提供命令行工具之外我们为本地服务提供了继承的图形管理工具,虽然没有命令行强大,但是对于普通用户这更为直观和方便。效果图如下:
如果本地管理工具在安装时设置了安全密码则必须输入密码。如果密码为空则直接进入管理界面
服务管理界面。双击服务可弹出修改服务配置窗口,可以使用右侧的按钮来执行操作。
服务参数配置窗口允许修改部分参数。对于开发者信息和ID信息则不允许修改。
获得产品序列号可在此激活服务器程序,但需要联网。
除此之外,我们还提供了一个用于开发者创建TokenKey和Guid的工具,同时他可以生成产品序列号
由此工具生成的序列号需要提交我们方可使用,其实这是一个内部函数,对于外部开发人员而言生成序列号可能并不适用于产品激活,当然如果开发者需要在自己的模块内部使用此类SN则还是有不少帮助
我们针对服务器数据管理除了提供内部命令行工具之外,还提供了远程管理工具,和web管理平台。而远程和web管理则不随着标准版服务器安装包一起发行,这需要额外的获取,并且允许将这些功能部署在远程计算机上,而非服务器环境本地,其中远程管理工具的截图如下:
支持触控和屏幕键盘输入。个性化设计,登录前显示红色状态来,登录后为蓝色。如果服务器未激活或授权失败则显示红色,并且登录后不会改变。
管理界面提供地址栏和树状导航两种模式来定位页面
与此同时我们提供了友好强大的Web管理功能自适应视图让您在任何设备上都有最佳的体验,截图如下:
由于使用Html5的缘故,必须使用IE9或更高的浏览器版本方可正常浏览。以上为登录页
上图为权限配置页面
上图为邮件与短信中心配置。这些功能尚在研发中。
关于服务器介绍就到此为止。
3.0 Server Database[服务器数据库]
我们为服务器使用了多维度数据。系统持久数据库包含以下部分:
1、 BaseSystem,基础系统数据库,保存系统基础信息,持久配置,全球国家地区数据,右边电话区号,学校设置,职业话费,系统Api等等数据全部在此数据库中
2、 BaseUser,基础用户数据库,保存系统所有用户信息,和关系数据,方便用户关系挖掘
3、 BaseEnterprise,企业数据库包含企业数据信息。
我们为数据库访问提供了统一的连接管理,比如获取数据库连接字符串的接口如下:
//Get encrypted database connection string
//“lpszConnName” Indicates that the connection name
ISERVERKERNELENGINE_APILPCTSTR GetServerConnectionString(LPCTSTR lpszConnName);
您可以根据您的连接名获取当前数据库连接字符串。同时允许您将您的应用连接字符串添加到我们的数据库器连接管理,这些连接都是被多重加密的,安全可靠,并且读取非常方便只需一行代码就搞定比如:
CString strConnection;
strConnection =GetServerConnectionString(_T("TestConnection"));
无论是数据库访问还是二次开发,这一切从未如此简单过。
4.0 Media Player简述
iMediaPlayer随着iMessenger一起发行的一款内置播放器,新版本将允许其单独安装。在旧版本上此播放器的功能仅限于播放屏幕录像以及iMessenger的录音和录像。在新版本上播放器有个革命性的变化,支
持全格式的音视频播放的同时支持iMessenger私有格式播放。在后期我们打算将自定义浏览器协议引入,直接在浏览器输入媒体地址从而打开本地播放器播放,提升效率的同时减少资源消耗。
在音频模式下此播放器支持迷你模式,在视频模式下则是禁止使用迷你模式,如果媒体列表中包含音视频混编,并且在音频模式下使用迷你模式,那么则在播放视频时自动切换到全模式,当视频播放完成后自动切换到迷你模式。
播放器目前已经支持启动时自动继续上一次播放的内容,并且记录播放进度,而不是从头开始。同时允许记录音量大小。支持热键和快捷键。
空状态
支持列表固定和自动伸缩
当列表固定时无论是否播放媒体列表始终显示,当列表自动时播放完毕后列表显示,播放时列表隐藏。
迷你模式下同样支持快捷键来操作音量大小和快进和快退。
目前暂不支持XP 系统
目前暂不支持自定义播放列表
目前状态下配置设置需要手动更改,在系统设置中设置了读取,却没有编写更改代码
部分UI仅仅实现了思路,尚未完善功能。
空状态模式下截图如下:
音乐播放时 迷你模式截图如下:
音乐播放时,全模式截图如下:
列表下面的按钮分别为:添加文件到列表,添加文件夹内媒体到列表,定位到当前播放。其他,显示或隐藏列表
全模式视频播放截图如下:
单击最列表最下方按钮可隐藏列表。无列表视频播放截图如下:
当然全屏也是支持的。播放器已经可以提供试用。后期针对iMessenger特殊音视频将做处理。届时将试用独有的音视频格式
播放器设置界面如下:
同时允许使用iMessenger账号登录到个人中心。登录与关于界面截图如下:
播放器提供程序来自Ffmpeg,接口层为iAvPlayer.dll,依赖于客户端的KernelUtil和KernelEngine以及AppFramework,在使用过程中我们同样提供了二次开发接口供开发者使用,将媒体开发接口做到极致。
除此之外我们针对Gips开发了非常简单的接口,供开发者开发摄像头与麦克风捕获程序时使用。这一切从未如此简单过。
5、Web Manege Framework简述
WebApps Kit是web管理后台的基础框架,开发者要开发自己的功能模块管理程序可将自己的页面签入到WebApps Kit的Framework中,其中导航配置以Xml配置,最大可能的简化了web管理功能的开发与使用成本。
6、Client Install
客户端安装程序,我们使用MFC完全开发,并没有使用第三方打包工具,所以更加人性化
客户端安装程序截图如下:
安装前必须同意安装条款,否则无法继续
安装时会要求您选择安装目录,一般情况下取默认
同时要求设置用户文档存储目录,此设置是全局的,在安装后更改这些配置可能导致已有用户的数据读取不正常,因此建议一次性设置。
安装过程一共分为两步骤
复制安装文件和注册安装文件
完成后会自动跳转到完成页面,无需手动处理
完成安装后会提示完成安装或跳转到设置页
这些安装工具不允许二次开发,因此没有二次开发接口。但是安装工具提供了自动加载配置文件,如果配置文件不存在则要求安装后手动更改,如果配置文件存在则不需要手动在设置中更改,为了方便管理员部署,我们推荐使用配置文件,配置文件由管理员工具创建客户端安装配置文件名称必须是ClientInstall.config,内容是加密的,解密后格式如下:
<ClientInstall>
<Install>
<InstallPathValue="C:\iMessenger\Client\2.0.14.5001\"/>
<ServerAddressValue="1111001101111010000100101111011011101100110111000111001110010111"/>
<ServerDomainValue="01011110010100100000001011"/>
<ServerConnectionKeyValue="000010000100000010010100100000101"/>
<ServicePortType Value="100101010100000010"/>
<ServicePortValue="1001010100111110100000010001101010"/>
</Install>
</ ClientInstall >
除了路径其他都是加密数据,使用工具生成类似上面内容的ClientInstall.config后直接与安装程序放在同一目录下即可
7、Server Install
服务器安装配置较为复杂,但我们同样为此提供了强大的安装工具,安装时一次设置即可完成所有配置,部分设置需要安装后运行本地服务器管理工具来更改配置或使用ServerMain命令行工具更改设置。
服务器安装程序部分截图如下:
看到上面的提示这表示当前计算机用户权限不够,必须是管理员权限方可继续安装
同时部分服务器功能可能要求必须安装在Windows server上,对于个人版系统可能会安装受阻,因此我们建议尽量的将服务器程序安装在服务器版本的Windows上。
服务器安装过程中设置较为麻烦,我们不一一截图,只是给出几个示例截图如下所示:
启动之后请单击现在开始跳转到环境监察页面
对系统最低配置有要求,过低的服务器配置将被阻止安装
除此之外,如果是64位服务器,为了提升稳定性将会被阻止在一些低版本或个人版系统上运行。如果系统环境检查通过则下一步按钮可用,如果失败则退出安装
必须同意安装许可协议,否则无法进入下一步
要求您选择要安装的选项,因为根据配置不同后面的安装项目也不同
为服务器的安装指定目录。这些目录包含服务器程序目录,数据库目录。更新目录和临时目录以及用户资源目录
服务器具体功能安装模块。
安装程序将文件展开到临时目录然后开始安装
安装完成后要求对服务器进行设置,一共有四步,上面只列出一步。
安装最后一步单击完成安装退出安装向导并启动服务。单击右侧的设置按钮则打开本地服务器管理器。
完成安装后单击非常感谢启动所有服务,单击右侧的设置按钮手动启动要启动的服务。
服务器安装中心工具同样使用了MFC开发,但是这些安装工具不允许二次开发,因此没有二次开发接口。但是安装工具提供了自动加载配置文件,如果配置文件不存在则要求手动填写,如果配置文件存在在不自动填写。
服务器端安装配置文件名必须是ServerInstall.config,以明文形式存在,管理员可在安装前手动创建或通过我们提供的工具创建,创建后格式如下:
< ServerInstall >
<Install>
< ServerInstallPath Value="C:\iMessenger\Server\2.0.14.5001"/>
< ServerDatabasePathValue="C:\iMessenger\Server\2.0.14.5001\Server_Database"/>
<............................由于服务器配置文件较长此处省略..............................>
</Install>
</ServerInstall>
有关服务器安装配置详细信息可去范文手动修改或通过工具生成。
关于iMessenger 2.0.14.8001和LiveBinn NetFramework Server 2.0的介绍就到此结束。之后随着时间的推移会分别给出iMessenger和iNetFramework以及具体功能服务的详细文档。