<meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE"> <meta content="OpenOffice.org 2.3 (Unix)" name="GENERATOR"> <style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style>

数据同步管理器设计备忘录

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>

在设计数据同步管理器时,主要考虑到与不同的PC工具和服务器同步,提高与其它手机的互通性的,方便与第三方合作开发一些增值服务。其基本架构如下

数据同步管理器设计备忘录


SyncSource: 是对数据源的抽象,它提供获取数据对象和更新对象的接口。常见的数据源有名片、日程、短信、彩信、邮件、相片、录音和记事等等。这个本来是很简单的东西,但为了实现快同步,每次只传输变化的数据,要手机端记录ChangeLog,就变得有点麻烦了。


对于数据库记录的同步。每条记录要增加创建时间和最后修改时间字段,有了这两个字段,我们可以根据最后同步时间生成新增记录和修改记录两个集合。要生成删除记录集合,我们还要增加一个表,并为每个表增加一个删除触发器。在删除记录时,把表名、ID和删除时间加到删除表中,据此我们就可以得到删除集合了。


对于文件类的同步。我们在目录里放一个索引文件,里面记录文件的创建时间和删除时间,文件ID和文件名的对应关系。修改时间可以通过stat取到,就不用记录了。同样根据最后同步时间我们可以得到新增,修改,删除和正常四个集合。


SyncSource是插件的方式提供的,增加新的SyncSource只要按这个接口提供一个动态库就行了。它的接口如下:


数据同步管理器设计备忘录typedefSyncRet(*SyncSrcRefFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcUnrefFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncID(
*SyncSrcGetIDFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedef
constchar*(*SyncSrcGetTypeFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedef
constchar*(*SyncSrcGetNameFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedef
constchar*(*SyncSourceGetURLFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedef
constchar*(*SyncSourceGetDescFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefsize_t(
*SyncSrcGetAllNrFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefsize_t(
*SyncSrcGetDeletedNrFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefsize_t(
*SyncSrcGetModifiedNrFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefsize_t(
*SyncSrcGetNewNrFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncObject
*(*SyncSrcGetObjectFunc)(SyncSrc*thiz,SyncObjectTypetype,size_tindex);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcSetObjectFunc)(SyncSrc*thiz,SyncObject*object);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcAddObjectFunc)(SyncSrc*thiz,SyncObject*object);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcUpdateObjectFunc)(SyncSrc*thiz,SyncObject*object);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcDeleteObjectFunc)(SyncSrc*thiz,SyncObject*object);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcBeginSyncFunc)(SyncSrc*thiz,SyncKindtype,time_tlast_sync,SyncDataFilter*filter);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncRet(
*SyncSrcEndSyncFunc)(SyncSrc*thiz,SyncRetresult);
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncObject
*(*SyncSrcCreateObjectFunc)(SyncSrc*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录
struct_SyncSrc
数据同步管理器设计备忘录
数据同步管理器设计备忘录数据同步管理器设计备忘录
...{
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcRefFunc
ref;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcUnrefFuncunref;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetIDFuncget_id;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetTypeFuncget_type;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetNameFuncget_name;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSourceGetURLFuncget_url;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSourceGetDescFuncget_desc;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcBeginSyncFuncbegin_sync;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcEndSyncFuncend_sync;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetAllNrFuncget_all_nr;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetDeletedNrFuncget_deleted_nr;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetModifiedNrFuncget_modified_nr;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetNewNrFuncget_new_nr;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcGetObjectFuncget_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcSetObjectFuncset_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcAddObjectFuncadd_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcUpdateObjectFuncupdate_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcDeleteObjectFuncdelete_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录SyncSrcCreateObjectFunccreate_object;
数据同步管理器设计备忘录
数据同步管理器设计备忘录
数据同步管理器设计备忘录
charpriv[0];
数据同步管理器设计备忘录
数据同步管理器设计备忘录}
;
数据同步管理器设计备忘录
数据同步管理器设计备忘录

SyncEngine: 是对具体同步方式的抽象。比如TCard备份是一个简单的engine,在备份时,它把SyncSource提供的数据存到TCard中,在恢复时,从Tcard中取出数据,并把数据存到 SyncSource中。Sync4JEngine负责通过SyncMLfunambol服务器同步。ActiveSyncEngine负责与ActiveSync同步。第三方增加新的同步方式只要实现下面的接口:


数据同步管理器设计备忘录typedefSyncRet(*SyncEngineRefFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineUnrefFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录typedefSyncID(
*SyncEngineGetIDFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录typedef
constchar*(*SyncEngineGetNameFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录 typedefSyncRet(
*SyncEngineBeginSyncFunc)(SyncEngine*thiz,SyncPartnerConfig*partner_config,SyncDataFilter*filter);
数据同步管理器设计备忘录 typedefSyncRet(
*SyncEngineSyncFunc)(SyncEngine*thiz,SyncSrc*source,time_tlast_sync,SyncKindtype);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineCancelFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineEndSyncFunc)(SyncEngine*thiz);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineRegEventListenerFunc)(SyncEngine*thiz,SyncOnEventFuncon_event,void*ctx);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineRegProgressListenerFunc)(SyncEngine*thiz,SyncOnProgressFuncon_progress,void*ctx);
数据同步管理器设计备忘录
数据同步管理器设计备忘录
struct_SyncEngine
数据同步管理器设计备忘录数据同步管理器设计备忘录
...{
数据同步管理器设计备忘录SyncEngineRefFunc
ref;
数据同步管理器设计备忘录SyncEngineUnrefFuncunref;
数据同步管理器设计备忘录SyncEngineGetIDFuncget_id;
数据同步管理器设计备忘录SyncEngineGetNameFuncget_name;
数据同步管理器设计备忘录SyncEngineBeginSyncFuncbegin_sync;
数据同步管理器设计备忘录SyncEngineSyncFuncsync;
数据同步管理器设计备忘录SyncEngineCancelFunccancel;
数据同步管理器设计备忘录SyncEngineEndSyncFuncend_sync;
数据同步管理器设计备忘录SyncEngineRegEventListenerFuncreg_event_listener;
数据同步管理器设计备忘录SyncEngineRegProgressListenerFuncreg_progress_listener;
数据同步管理器设计备忘录
数据同步管理器设计备忘录
charpriv[0];
数据同步管理器设计备忘录}
;
数据同步管理器设计备忘录

SyncEngineSettings主要负责SyncEngine的设置,每个SyncEngine插件都要提供一个SyncEngineSettings插件,SyncEngineSettings是和GUI相关的,所以与SyneEngine分开提供。SyncEngineSettings的接口很简单:


数据同步管理器设计备忘录struct_SyncEngineSettings;
数据同步管理器设计备忘录typedef
struct_SyncEngineSettingsSyncEngineSettings;
数据同步管理器设计备忘录
数据同步管理器设计备忘录typedefSyncID(
*SyncEngineSettingsGetIDFunc)(SyncEngineSettings*thiz);
数据同步管理器设计备忘录typedef
constchar*(*SyncEngineSettingsGetNameFunc)(SyncEngineSettings*thiz);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineSettingsEditPartnerFunc)(SyncEngineSettings*thiz,SyncPartnerConfig*partner_config,SyncSettingsEditDoneFuncdone,void*ctx);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineSettingsRefFunc)(SyncEngineSettings*thiz);
数据同步管理器设计备忘录typedefSyncRet(
*SyncEngineSettingsUnrefFunc)(SyncEngineSettings*thiz);
数据同步管理器设计备忘录
数据同步管理器设计备忘录
struct_SyncEngineSettings
数据同步管理器设计备忘录数据同步管理器设计备忘录
...{
数据同步管理器设计备忘录SyncEngineSettingsRefFunc
ref;
数据同步管理器设计备忘录SyncEngineSettingsUnrefFuncunref;
数据同步管理器设计备忘录SyncEngineSettingsGetIDFuncget_id;
数据同步管理器设计备忘录SyncEngineSettingsGetNameFuncget_name;
数据同步管理器设计备忘录SyncEngineSettingsEditPartnerFuncedit_partner;
数据同步管理器设计备忘录
数据同步管理器设计备忘录
charpriv[0];
数据同步管理器设计备忘录}
;
数据同步管理器设计备忘录


~~end~~




相关文章:

  • 2021-06-05
  • 2021-09-05
  • 2021-05-05
  • 2021-11-08
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2022-01-09
  • 2021-08-16
  • 2021-05-31
  • 2021-12-08
  • 2021-10-30
  • 2021-09-15
相关资源
相似解决方案