CN102413115A - 一种客户端插件系统 - Google Patents

一种客户端插件系统 Download PDF

Info

Publication number
CN102413115A
CN102413115A CN2011102306910A CN201110230691A CN102413115A CN 102413115 A CN102413115 A CN 102413115A CN 2011102306910 A CN2011102306910 A CN 2011102306910A CN 201110230691 A CN201110230691 A CN 201110230691A CN 102413115 A CN102413115 A CN 102413115A
Authority
CN
China
Prior art keywords
low coupling
card module
interface
plug
client
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011102306910A
Other languages
English (en)
Other versions
CN102413115B (zh
Inventor
李茗
张树坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
LeTV Information Technology Beijing Co Ltd
Original Assignee
LeTV Information Technology Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by LeTV Information Technology Beijing Co Ltd filed Critical LeTV Information Technology Beijing Co Ltd
Priority to CN201110230691.0A priority Critical patent/CN102413115B/zh
Publication of CN102413115A publication Critical patent/CN102413115A/zh
Application granted granted Critical
Publication of CN102413115B publication Critical patent/CN102413115B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供了一种客户端插件系统,包括本地服务器和至少一个低耦合插件模块,所述低耦合插件模块运行时分别生成独立进程,并且所述低耦合插件模块与所述本地服务器进行通讯;所述本地服务器向所述低耦合插件模块进行通讯和转发。本发明的系统改变了现有客户端系统的体系架构,将客户端系统所实现的各种功能模块构造为独立的低耦合插件模块,通过统一的接口集成到统一的平台从而形成客户端插件系统,各低耦合插件模块作为独立进程运行,使同时运行的多个插件模块之间耦合降至最低,从而形成了一种低耦合、开放性的客户端系统,使客户端系统实现了性能稳定和易于扩展升级。

Description

一种客户端插件系统
技术领域
本发明涉及计算机网络的客户端,尤其涉及一种客户端插件系统。
背景技术
客户端系统是各种计算机网络业务的终端部件,同时也是各种网络业务与用户之间的接口部件。任何一种基于网络的业务系统,都要依赖客户端向最终用户提供业务。例如,在网络电视业务中,用户需要在本地计算机上运行客户端,才能连接网络电视服务器、获取并播放流媒体数据以及对播放进行控制;在网络聊天业务中,用户也通常需要借助客户端来连接服务器、收发文字或语音消息以及获得各种附加业务。在互联网行业激烈竞争的条件下,对于任何一种网络业务来说,都需要首先构造功能强大、界面友好的客户端系统,才能保证网络业务的正常运行,并通过提升客户端应用体验来吸引更多的用户。
在客户端技术中,首先要保证客户端系统能够运行稳定,不出现Bug导致系统崩溃;其次,客户端系统要适应不断增加的新业务和新功能,因此需要具有开放的架构从而便于升级扩展。以上两个方面是衡量客户端系统架构优劣的重要指标。此外,客户端系统还应当具有节约系统资源、界面友好易用等优点。
然而,现有网络服务的客户端系统往往不能达到以上几个方面的要求,表现在:各种功能模块缺少统一的集成平台,因此给客户端升级带来困难;各种功能模块的进程彼此频繁调用和进行数据通讯,容易发生BUG导致系统崩溃,在升级加入新的功能和业务模块后尤其如此;客户端本身无法进行必要的系统操作,导致功能受到限制;用户界面通常应用FLASH构建,客户端需要打包FLASH播放器导致程序体积过大,占用系统资源。上述缺陷主要是由于在现有的客户端系统中各种功能模块彼此高度耦合所带来的,因此依靠现有的客户端体系架构无法从根本上加以解决。
发明内容
针对现有技术中的上述问题,本发明提供了一种客户端插件系统。本发明的系统改变了现有客户端系统的体系架构,将客户端系统所实现的各种功能模块构造为独立的低耦合插件模块,通过统一的接口集成到统一的平台从而形成客户端插件系统,各低耦合插件模块作为独立进程运行,使同时运行的多个插件模块之间耦合降至最低,从而形成了一种低耦合、开放性的客户端系统,使客户端系统实现了性能稳定和易于扩展升级。
本发明所述的客户端插件系统,包括本地服务器,还包括至少一个低耦合插件模块,所述低耦合插件模块运行时分别生成独立进程,并且所述低耦合插件模块与所述本地服务器进行通讯;所述本地服务器向所述低耦合插件模块进行通讯和转发。
优选地,其中,所述本地服务器进一步用于对所述低耦合插件模块进行管理控制。
优选的是,其中,所述本地服务器与所述低耦合插件模块通过本地Socket进行通讯。进一步优选地,所述本地服务器与所述低耦合插件模块交互XML格式信令。
优选的是,其中,所述低耦合插件模块为低耦合UI插件模块,所述低耦合UI插件模块包括:UI层接口,用于提供用户界面;以及FLASH容器,用于提供由UI层调用以实现界面操作功能的接口。其中,所述FLASH容器用于加载FLASH文件形成所述用户界面,并提供根据FLASH文件执行插件功能的接口;进一步地,当所述FLASH容器加载一个特定的FLASH文件时形成一个独立进程;并且所述插件的操作功能包括本地文件读写、注册表读写。
优选的是,所述低耦合插件模块为所述本地服务器的控制界面插件模块,用于为所述本地服务器提供控制界面。
优选的是,所述客户端插件系统具有特定的接入接口,符合所述接入接口的所述低耦合插件模块可接入所述本地服务器从而扩展客户端插件系统功能。
本领域技术人员不难看出,上述各技术方案的任意组合都属于本发明的范畴。
本发明所述的客户端插件系统将客户端的每个功能模块都构造为插件,在客户端运行时每个插件都形成一个独立的进程,进程的逻辑功能与物理代码都是独立的,彼此之间不存在调用关系,从而实现了进程之间的低耦合,单一进程的不稳定只影响该进程的功能,不会将该不稳定的影响扩展到整个客户端系统。多个插件之间,利用本机Socket通过本地服务器的转发进行通讯,避免了多个进程直接的无序信令交互;本地服务器作为任意两个插件的通讯转发中心,还负责对各个插件的管理控制。客户端的重要作用之一是向用户提供UI界面,本发明的低耦合插件模型可以是低耦合UI插件模型,实现了功能模块和FLASH用户界面逻辑的隔离解耦,提高稳定性的同时也扩展了插件功能。所述客户端插件系统具有统一的接入接口,功能单元只要符合接入接口规范即可集成到统一的客户端平台,使各种独立的功能都可以聚合到同一个客户端系统,方便了功能扩展。
本发明改变了现有的体系架构,克服了现有客户端系统的各种缺陷实现了一种低耦合、稳定性高、界面友好、功能强大、开放易扩展的客户端系统。
附图说明
图1是 本发明的客户端插件系统的一优选实施例的结构示意图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合具体实施方式并配合附图详予说明。
图1是本发明的客户端插件系统的一实施例结构示意图。本实施例以一种典型的客户端系统即网络电视业务的客户端为示例,说明本发明的低耦合、开放性系统结构和工作原理。
本发明的客户端插件系统,将客户端的各种功能模块构造为独立的低耦合插件模块,通过统一的接口集成到统一的平台。如图1所示,在应用于网络电视的客户端系统中,具有TV插件模块10,UploaderUI插件模块20以及UploaderProcess插件模块30。以上插件均为所述低耦合插件模块,其逻辑功能和物理代码都是独立的,在运行时其分别生成独立进程,进程之间没有相互调用,因此各插件模块独立工作,一个插件模块的正常运行不依赖于其它插件所产生的进程的工作状态是否正常。因而,一旦某个低耦合插件模块所产生的进程出现不稳定、报错甚至崩溃,由于进程之间的独立也不会使影响扩散,这样不但能够保证客户端系统的其它功能正常运行,也有利于代码维护的Bug定位。
在本实施例中,TV插件模块10运行时产生独立的网络电视播放进程,该进程生成网络电视的播放器界面,并执行视音频的播放功能;UploaderUI插件模块20和UploaderProcess插件模块30都属于上传工具插件,用于把客户端的音视频上传;但二者运行时同样各自产生互不影响的独立进程。具体来说,UploaderUI插件模块20生成的客户端进程显示上传工具的用户界面,并提供支持用户界面完成其显示功能的各种接口。UploaderProcess插件模块30运行Uploader模块301,生成的是后台进程,用于执行音视频媒体的上传功能。
虽然各个低耦合模块在运作时所生成的进程是彼此独立的,但客户端系统在正常工作中,各种进程之间必然需要相互进行数据与指令通信,例如某些进程的执行需要其它进程执行中产生的数据,某些进程需要其它进程执行到特定状态后才能够执行。本发明的客户端插件系统中,采用客户端的低耦合插件模块与本地服务器之间相互通讯,由本地服务器向低耦合插件模块进行通讯转发的方式,即任意两个低耦合插件不进行直接通讯,而是由本地服务器作为系统中任意两个插件的通讯中心,进行数据和信令的转发。另外,所述本地服务器进一步用于对所述低耦合插件模块进行管理控制。本地服务器与低耦合插件之间的通讯是利用本地Socket来实现的。
如图1所示,本地服务器40运行Loader模块401。Loader模块401作为TV插件模块10,UploaderUI插件模块20以及UploaderProcess插件模块30等低耦合插件模块之间的通讯中心,以上插件模块运行生成的进程不能直接通讯,可以通过Loader模块401在彼此之间转发数据。Loader模块401 与TV插件模块10,UploaderUI插件模块20以及UploaderProcess插件模块30的进程之间以本地Socket方式进行通。本地Socket通讯技术是现有技术中一种成熟的并且与平台无关的进程通信方式。另外,本地服务器40还进一步用于对所述低耦合插件模块进行管理控制,这些管理和控制也是由Loader模块401通过本地Socket与各低耦合插件模块交互控制和管理指令来实现的。
本地服务器40与低耦合插件模块之间交互所使用的信令采用XML格式信令。XML格式信令是一种文本格式信令,优点是易读、容易扩充,具有强大的数据承载和描述能力,从而使信令结构清晰,无限扩展。
客户端系统的重要作用之一是提供用户界面作为人机交互的UI接口。现有的客户端主要采用FLASH程序来开发客户端系统的UI接口。FLASH程序具有较强的表现能力和视频数据渲染能力,能够使UI接口形成良好视觉效果和易用的操作界面,这对客户端系统的应用具有重要意义。然而,FLASH程序的局限性也非常明显,首先是显示FLASH程序开发的用户界面需要打包FLASH PLAYER到FLASH程序中,使FLASH程序体积过大,而且FLASH PLAYER不能重用每个UI接口的FLASH程序体积都很大。其次,FLASH开发的UI接口与客户端系统的功能层相互不分,容易发生系统错误;最后,FLASH程序开发的UI接口在整个系统中的权限较低,无法实现必要的操作功能。
针对上述缺陷,在本发明的客户端系统中,可以通过插件模块来实现UI接口,即构造低耦合UI插件模块作为上述低耦合模块中的一种类型。低耦合UI插件模块保留上述低耦合模块的全部功能特点,即运行时产生独立进程,通过本地服务器的转发与其它进程进行数据和指令通讯,等等。
具体而言,所述低耦合UI插件模块包括:用于提供用户界面的UI层接口,以及用于提供支持插件功能的接口的FLASH容器。UI层接口采用FLASH程序开发,并形成FLASH文件,利用FLASH程序在UI层的表现能力和视频渲染能力提供高效易用美观的用户界面。所述FLASH容器用于加载所述FLASH文件形成所述用户界面,并提供根据FLASH文件执行插件功能的下层接口。FLASH容器采用C++进行开发,其在客户端的操作系统中运行,其所提供的接口使UI层可以调用各种系统功能以实现界面的操作功能;FLASH容器所提供的接口使UI层能够实现FLASH程序无权限进行的系统级功能,例如本地文件读写和注册表的读写等。需要强调指出,FLASH容器是一个与UI层接口所实现的具体业务没有任何关系的模块,其只是调用UI层接口的FLASH文件并提供必要的功能接口。FLASH容器根据需要调用特定的FLASH文件,从而生成具体的用户界面和实现具体的插件功能。每当所述FLASH容器加载一个特定的FLASH文件时形成一个独立进程,并显示不同的应用程序标题。因此,低耦合UI插件模块通过这种UI层接口与FLASH容器二者分离的结构使用户界面与其实现的后台功能实现了解耦。
如图1所示, TV插件模块10,UploaderUI插件模块20两个低耦合插件模块即上述低耦合UI插件模块。TV插件模块10包括UI层接口101以及SWFC 102。UI层接口101提供实现网络电视播放器界面的FLASH文件tv.swf。FLASH容器SWFC 102加载FLASH文件tv.swf形成所述用户界面,并为FLASH文件tv.swf提供执行插件功能的接口。FLASH容器SWFC 102加载FLASH文件tv.swf后形成一个唯一的独立进程。该进程同样通过与本地服务器40的Loader 401进行本地Socket通讯,从而实现与其它进程的通讯。UploaderUI插件模块20与之类似,UI层接口201提供FLASH文件Uploader.swf,FLASH容器SWFC 202加载FLASH文件Uploader.swf形成上传工具的用户界面,并为FLASH文件Uploader.swf提供执行插件功能的接口。tv.swf和Uploader.swf是用FLASH开发的UI层文件,作为与用户的接口,提供用户可操作的界面。作为FLASH容器的SWFC 102和SWFC 202以C++开发,在客户端的操作系统(如WINDOWS)中运行,其所提供的接口使UI层可以调用各种系统功能以实现界面的操作功能,实现了UI层与插件功能层的解耦隔离。
    本发明所构造的客户端插件系统,将客户端的各种功能模块均构造为低耦合插件模块。所述客户端插件系统具有特定的接入接口,所述低耦合插件模块符合特定的接入接口即可接入所述本地服务器,从而集成到统一的客户端平台中,从而将各种功能单元聚合到同一个程序集,方便形成统一的管理,有利于客户端开放性的功能扩展。所述本地服务器40的控制界面也可以构造为一个低耦合插件模块,即控制界面插件模块,用于为所述本地服务器提供作为人机接口的控制界面。
本发明所述的客户端使每个插件都形成一个独立的进程,实现了进程之间的低耦合,单一进程的不稳定只影响该进程的功能,不会将该不稳定的影响扩展到整个客户端系统,增加了系统的稳定性;通过低耦合UI插件模型,实现了功能模块和FLASH用户界面逻辑的隔离解耦,提高稳定性的同时也扩展了插件功能;具有统一的接入接口,便于各种功能单元以插件的形式集成到统一的客户端平台,方便了功能扩展。本发明实现了一种低耦合、稳定性高、界面友好、功能强大、开放易扩展的客户端系统。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种客户端插件系统,包括本地服务器,其特征在于,还包括至少一个低耦合插件模块,所述低耦合插件模块运行时分别生成独立进程,并且所述低耦合插件模块与所述本地服务器进行通讯;所述本地服务器向所述低耦合插件模块进行通讯和转发。
2.根据权利要求1所述的客户端插件系统,其特征在于,所述本地服务器进一步用于对所述低耦合插件模块进行管理控制。
3.根据权利要求1所述的客户端插件系统,其特征在于,所述本地服务器与所述低耦合插件模块通过本地Socket进行通讯。
4.根据权利要求3所述的客户端插件系统,其特征在于,所述本地服务器与所述低耦合插件模块交互XML格式信令。
5.根据权利要求1所述的客户端插件系统,其特征在于,所述低耦合插件模块为低耦合UI插件模块,所述低耦合UI插件模块包括:UI层接口,用于提供用户界面;以及FLASH容器,用于提供由UI层调用以实现界面操作功能的接口。
6.根据权利要求5所述的客户端插件系统,其特征在于,所述FLASH容器用于加载FLASH文件形成所述用户界面,并提供根据FLASH文件执行插件功能的接口。
7.根据权利要求6所述的客户端插件系统,其特征在于,当所述FLASH容器加载一个特定的FLASH文件时形成一个独立进程。
8.根据权利要求7所述的客户端插件系统,其特征在于,所述插件功能包括本地文件读写、注册表读写。
9.根据权利要求1所述的客户端插件系统,其特征在于,所述低耦合插件模块为所述本地服务器的控制界面插件模块,用于为所述本地服务器提供控制界面。
10.根据权利要求1所述的客户端插件系统,其特征在于,所述客户端插件系统具有特定的接入接口,符合所述接入接口的所述低耦合插件模块可接入所述本地服务器从而扩展客户端插件系统功能。
CN201110230691.0A 2011-08-12 2011-08-12 一种客户端插件系统 Expired - Fee Related CN102413115B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110230691.0A CN102413115B (zh) 2011-08-12 2011-08-12 一种客户端插件系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110230691.0A CN102413115B (zh) 2011-08-12 2011-08-12 一种客户端插件系统

Publications (2)

Publication Number Publication Date
CN102413115A true CN102413115A (zh) 2012-04-11
CN102413115B CN102413115B (zh) 2015-05-13

Family

ID=45914970

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110230691.0A Expired - Fee Related CN102413115B (zh) 2011-08-12 2011-08-12 一种客户端插件系统

Country Status (1)

Country Link
CN (1) CN102413115B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102685220A (zh) * 2012-04-28 2012-09-19 苏州阔地网络科技有限公司 一种基于web页面的数据交互方法及系统
CN104636122A (zh) * 2013-11-06 2015-05-20 中国移动通信集团公司 一种能力组件的共享方法和设备
CN106406930A (zh) * 2016-08-25 2017-02-15 苏州蓝海彤翔系统科技有限公司 插件系统
CN106569857A (zh) * 2016-11-03 2017-04-19 厦门印了么信息科技有限公司 一种在线印刷服务的双向插件系统及其运行方法
CN107566338A (zh) * 2017-07-26 2018-01-09 中车工业研究院有限公司 一种基于本地cad云存储的安全插件系统及设备
CN110727500A (zh) * 2019-09-27 2020-01-24 上海依图网络科技有限公司 系统中的功能模块的集成方法、系统、设备及介质
CN110896394A (zh) * 2018-09-13 2020-03-20 国网上海市电力公司 一种视频监控设备漏洞安全检测系统

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112860346B (zh) * 2021-03-05 2023-04-28 成都云隆科技有限公司 一种插件式桌面客户端系统及其访问方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101201755A (zh) * 2007-05-10 2008-06-18 深圳市同洲电子股份有限公司 一种数字接收终端的软件模块管理方法、系统及设备
CN101510167A (zh) * 2009-03-31 2009-08-19 阿里巴巴集团控股有限公司 一种插件运行的方法、装置及系统
CN101630272A (zh) * 2009-08-19 2010-01-20 用友软件股份有限公司 进程调度方法和系统
CN101996095A (zh) * 2009-08-26 2011-03-30 阿里巴巴集团控股有限公司 插件接入即时通讯程序的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101201755A (zh) * 2007-05-10 2008-06-18 深圳市同洲电子股份有限公司 一种数字接收终端的软件模块管理方法、系统及设备
CN101510167A (zh) * 2009-03-31 2009-08-19 阿里巴巴集团控股有限公司 一种插件运行的方法、装置及系统
CN101630272A (zh) * 2009-08-19 2010-01-20 用友软件股份有限公司 进程调度方法和系统
CN101996095A (zh) * 2009-08-26 2011-03-30 阿里巴巴集团控股有限公司 插件接入即时通讯程序的方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李大卓 等: "《Eclipse核心编程 插件、界面与Web开发》", 30 April 2007 *
潘宸 等: "基于ArcEngine插件式GIS应用框架的设计与实现", 《现代测绘》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102685220A (zh) * 2012-04-28 2012-09-19 苏州阔地网络科技有限公司 一种基于web页面的数据交互方法及系统
CN104636122A (zh) * 2013-11-06 2015-05-20 中国移动通信集团公司 一种能力组件的共享方法和设备
CN104636122B (zh) * 2013-11-06 2018-05-18 中国移动通信集团公司 一种能力组件的共享方法和设备
CN106406930A (zh) * 2016-08-25 2017-02-15 苏州蓝海彤翔系统科技有限公司 插件系统
CN106569857A (zh) * 2016-11-03 2017-04-19 厦门印了么信息科技有限公司 一种在线印刷服务的双向插件系统及其运行方法
CN107566338A (zh) * 2017-07-26 2018-01-09 中车工业研究院有限公司 一种基于本地cad云存储的安全插件系统及设备
CN110896394A (zh) * 2018-09-13 2020-03-20 国网上海市电力公司 一种视频监控设备漏洞安全检测系统
CN110727500A (zh) * 2019-09-27 2020-01-24 上海依图网络科技有限公司 系统中的功能模块的集成方法、系统、设备及介质

Also Published As

Publication number Publication date
CN102413115B (zh) 2015-05-13

Similar Documents

Publication Publication Date Title
CN102413115A (zh) 一种客户端插件系统
CN100461692C (zh) 网络设备配置系统和方法
CN103281197B (zh) 一种基于NETCONF的ForCES配置方法
CN101894192B (zh) Afdx网络设计与验证的仿真和演示系统及其仿真和演示方法
CN109951315A (zh) 一种实现yang模型到内部模型映射的方法及系统
CN100356323C (zh) 用户面板管理器和创建自定义动态子窗口的方法
CN103516555A (zh) 网络设备监控方法及系统
CN101252469B (zh) 一种多网元自动化测试方法
CN101854280A (zh) 一种局域网下云服务系统及访问方法
US8589381B2 (en) Resource management program, resource management process, and resource management apparatus
CN102801565A (zh) 一种在网络管理系统中对业务配置集中管理的方法
CN107741884A (zh) 一种分层状态机实现消息推送的方法和装置
CN111064626A (zh) 配置更新方法、装置、服务器及可读存储介质
CN102541451A (zh) 一种基于flexair技术实现的企业级桌面应用集成平台
CN103747067A (zh) 一种基于数字家庭智能网关的数据配置方法
CN103809979A (zh) 一种人机交互软件模块集成系统及其实现方法
CN113515267A (zh) 一种基于工业物联网的PaaS平台
CN102868746B (zh) 实现移动信息化的方法
WO2018014553A1 (zh) 智能家居系统的搭建方法、装置、智能家居系统及终端
CN109683875B (zh) 分布式环境下mvc模式的应用框架系统及其方法
CN101820354A (zh) 基于tnds对象的配置方法、终端设备及服务器
CN103473634A (zh) 数字影音图书馆维护监控方法
CN113281594B (zh) 针对继电保护实现远方智能自动测试的系统及其方法
CN112769624B (zh) 一种基于点表的工业物联网网关设计方法
CN109698808A (zh) 一种加载模板消息的方法、设备和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150513

Termination date: 20170812

CF01 Termination of patent right due to non-payment of annual fee