📄 syncsession.cpp
字号:
pTarget->targetRef = smlString2Pcdata(pMap->target_locURI);
SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
status.sourceRefList = pSource;
pSource->sourceRef = smlString2Pcdata(pMap->source_locURI);
if(pMap->mapItemList!=NULL)
{
CmdMapItemList_s * pcmditemlist = pMap->mapItemList;
while(pcmditemlist!=NULL)
{
CmdMapItem_s *pitem = pcmditemlist->mapItem;
if(pitem!=NULL)
{
char *targetlocURI = pitem->target_locURI;
char *sourcelocURI = pitem->source_locURI;
int nlocuri = atoi(targetlocURI);
char sql [1024];
sprintf(sql,"update pim_contact set locuri='%s' ,updatetime = getdate(),flag = 0 where id=%d ",sourcelocURI,nlocuri);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
}
pcmditemlist=pcmditemlist->next;
}
}
status.data = smlString2Pcdata("200");
smlStatusCmd( id, &status);
}
void CSyncSession::HandleStatus(InstanceID_t id,CmdStatus_s* pStatus ,CmdSyncHdr_s*pSyncHdr)
{
char vert[10];
if(_get_status_datatype(pStatus)==SML_PE_ADD)
{
//add操作返回是在map中处理的。
}
if(_get_status_datatype(pStatus)==SML_PE_REPLACE)
{
//更新标志位
if(pStatus->targetRefList!=NULL)
{
if(pStatus->targetRefList->targetRef!=NULL)
{
char* slocuri = pStatus->targetRefList->targetRef;
char sql [1024];
sprintf(sql,"update pim_contact set updatetime = getdate(),flag = 0 where locuri='%s' and userid='%s' ",slocuri,m_sUser);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
}
}
}
}
void CSyncSession::HandleFinal(InstanceID_t id, Boolean_t*pfinal,CmdSyncHdr_s* pSyncHdr)
{
if(*pfinal)
{
if(m_eClientState==Sync_ClientSyncStart)
{
XPTDEBUG(("myHandleEndMessage SET Sync_ClientSyncOK\n"));
m_eClientState =Sync_ClientSyncOK;//同步结束
}
}
//双向同步都结束后更新
if(m_eClientState==Sync_ClientSyncOK&&m_eServerState==Sync_ServerSyncOK)
{
char sql [10240];
sprintf(sql,"update pim_user set clientanchor ='%s',serveranchor='%s',synctype='%d' ,updatetime = getdate() where userid='%s' ",m_sClientAnchor,m_sServerAnchor,m_nSyncType,m_sUser);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
}
}
void CSyncSession::HandleAdd(InstanceID_t id, CmdAdd_s* pAdd,CmdSyncHdr_s* pSyncHdr)
{
char vert[10];
CVcard card;
card.Parse((char*)pAdd->itemList->item->data,smlLibStrlen((char*)(pAdd->itemList->item->data)));
card.CheckCards();
VItem*item = card.GetItem(N);
char *tmp = "";
char *data =tmp;
char * name = tmp;
char * locuri = tmp;
char * rev = tmp;
char * tell = tmp;
if(item!=NULL)
{
if(item->data!=NULL)
{
name = item->data;
}
}
item = card.GetItem(TEL);
if(item!=NULL)
{
if(item->data!=NULL)
{
tell = item->data;
//XPTDEBUG(("Add.Item.Data = %s\n", item->data));
}
}
if(pAdd->itemList->item->source_locURI!=NULL)
locuri = pAdd->itemList->item->source_locURI;
if(pAdd->itemList->item->data!=NULL)
data= (char*)pAdd->itemList->item->data;
char sql [10240];
sprintf(sql,"select count(*) from pim_contact where userid='%s' and locuri='%s'",m_sUser,locuri);
CMySet set;
if(workdb.PrepareSql(sql, set)==FALSE)
{
XPTDEBUG(("sql=%s error=%s\n",sql,workdb.GetSqlError()));
}
else
{
if(workdb.FetchData())
{
int nCnt = atoi(set.GetFieldValue(0));
XPTDEBUG(("sql=%s Count=%d\n",sql,nCnt));
if(nCnt==0)
{
sprintf(sql,"insert into pim_contact(userid,locuri,contact_cell,contact_name,data) values('%s' , '%s','%s','%s','%s')",m_sUser,locuri,tell,name,data);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
}
else
{
}
}
}
card.Free();
SmlStatus_t status;
smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
status.elementType = SML_PE_STATUS;
sprintf(vert , "%d",m_nCmdID++);
status.cmdID = smlString2Pcdata(vert);
status.msgRef = smlString2Pcdata(pSyncHdr->msgID);
status.cmdRef = smlString2Pcdata(pAdd->cmdID);
status.cmd = smlString2Pcdata("Add");
if(pAdd->itemList!=NULL&&pAdd->itemList->item!=NULL&&pAdd->itemList->item->target_locURI!=NULL)
{
SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
status.targetRefList = pTarget;
pTarget->targetRef = smlString2Pcdata(pAdd->itemList->item->target_locURI);
}
if(pAdd->itemList!=NULL&&pAdd->itemList->item!=NULL&&pAdd->itemList->item->source_locURI!=NULL)
{
SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
status.sourceRefList = pSource;
pSource->sourceRef = smlString2Pcdata(pAdd->itemList->item->source_locURI);
}
status.data = smlString2Pcdata("201");
smlStatusCmd( id, &status);
}
void CSyncSession::HandleAlert(InstanceID_t id, CmdAlert_s* pAlert,CmdSyncHdr_s* pSyncHdr)
{
int alerttype = 0;
char vert[10];
SmlStatus_t status;
smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
status.elementType = SML_PE_STATUS;
sprintf(vert , "%d",m_nCmdID++);
status.cmdID = smlString2Pcdata(vert);
status.msgRef = smlString2Pcdata(pSyncHdr->msgID);
status.cmdRef = smlString2Pcdata(pAlert->cmdID);
status.cmd = smlString2Pcdata("Alert");
if(pAlert->itemList!=NULL&&pAlert->itemList->item!=NULL&&pAlert->itemList->item->target_locURI!=NULL)
{
SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
status.targetRefList = pTarget;
if(m_sTargetLocURI==NULL)
{
m_sTargetLocURI = (char *)smlLibMalloc(smlLibStrlen(pAlert->itemList->item->target_locURI));
smlLibStrcpy(m_sTargetLocURI,pAlert->itemList->item->target_locURI);
}
pTarget->targetRef = smlString2Pcdata(pAlert->itemList->item->target_locURI);
}
if(pAlert->itemList!=NULL&&pAlert->itemList->item!=NULL&&pAlert->itemList->item->source_locURI!=NULL)
{
SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
if(m_sSourceLocURI==NULL)
{
m_sSourceLocURI = (char *)smlLibMalloc(smlLibStrlen(pAlert->itemList->item->source_locURI));
smlLibStrcpy(m_sSourceLocURI,pAlert->itemList->item->source_locURI);
}
status.sourceRefList = pSource;
pSource->sourceRef = smlString2Pcdata(pAlert->itemList->item->source_locURI);
}
//&&pAlert->itemList->item->meta!=NULL
if(pAlert->itemList!=NULL&&pAlert->itemList->item!=NULL)
{
SmlItemListPtr_t pItemList = (SmlItemListPtr_t)smlLibMalloc(sizeof(SmlItemList_t));
smlLibMemset(pItemList, 0, sizeof(SmlItemList_t));
status.itemList = pItemList;
SmlItemPtr_t pItem = (SmlItemPtr_t)smlLibMalloc(sizeof(SmlItem_t));
smlLibMemset(pItem, 0, sizeof(SmlItem_t));
pItemList->item = pItem;
if(pAlert->itemList->item->target_locURI!=NULL)
{
pItem->source = (SmlTargetPtr_t)smlLibMalloc(sizeof(SmlTarget_t));
pItem->source->locURI = smlString2Pcdata(pAlert->itemList->item->target_locURI);
pItem->source->locName = NULL;
}
if(pAlert->itemList->item->source_locURI!=NULL)
{
pItem->target = (SmlSourcePtr_t)smlLibMalloc(sizeof(SmlSource_t));
pItem->target->locURI = smlString2Pcdata(pAlert->itemList->item->source_locURI);
pItem->target->locName = NULL;
}
///////////////////
if(pAlert->itemList->item->meta!=NULL)
{
pItem->data = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t));
smlLibMemset(pItem->data, 0, sizeof(SmlPcdata_t));
pItem->data->contentType=SML_PCDATA_EXTENSION;
pItem->data->extension=SML_EXT_METINF;
pItem->data->content = (SmlMetInfMetInfPtr_t)smlLibMalloc(sizeof(SmlMetInfMetInf_t));
smlLibMemset(pItem->data->content, 0, sizeof(SmlMetInfMetInf_t));
SmlMetInfMetInfPtr_t pMeta = (SmlMetInfMetInfPtr_t)(pItem->data->content);
SmlMetInfAnchorPtr_t pAnchor = NULL ;
pAnchor = (SmlMetInfAnchorPtr_t)smlLibMalloc(sizeof(SmlMetInfAnchor_t));
smlLibMemset(pAnchor, 0, sizeof(SmlMetInfAnchor_t));
pMeta->anchor = pAnchor ;
pMeta->anchor->next = smlString2Pcdata(pAlert->itemList->item->meta->anchor_next);
int data = atoi(pAlert->data);
if(data==200)//双向同步
{
//如果客户端发起双向同步,检测上次同步的ANCHOR
//获取上次同步的ANCHOR
char * last = _database_get_clientanchor(m_sUser);
//
if(pAlert->itemList->item->meta->anchor_last==NULL)
{
status.data = smlString2Pcdata("508");
//if(pSess->m_nSyncType==0)
m_nSyncType = 201;
data = 201;
alerttype = 1;
}
else
{
if(strcmp(pAlert->itemList->item->meta->anchor_last,last)!=0)
{
//要求客户端重建慢同步
data = 201;
//if(pSess->m_nSyncType==0)
m_nSyncType = 201;
status.data = smlString2Pcdata("508");
alerttype = 1;
}
else
{
//OK
status.data = smlString2Pcdata("200");
}
}
}
else if(data==201) //客户端发起的慢同步
{
status.data = smlString2Pcdata("201");
}
}
}
int data = atoi(pAlert->data);
if(data==222)
{
status.data = smlString2Pcdata("200");
}
smlStatusCmd( id, &status);
if(data!=222)
{
SmlAlert_t alert;
smlLibMemset(&alert,0,(MemSize_t)sizeof(SmlAlert_t));
alert.elementType = SML_PE_ALERT;
sprintf(vert , "%d",m_nCmdID++);
alert.cmdID = smlString2Pcdata(vert);
alert.itemList = (SmlItemListPtr_t)smlLibMalloc(sizeof(SmlItemList_t));
smlLibMemset(alert.itemList, 0, sizeof(SmlItemList_t));
if(pAlert->itemList!=NULL&&pAlert->itemList->item!=NULL)
{
SmlItemPtr_t pItem = (SmlItemPtr_t)smlLibMalloc(sizeof(SmlItem_t));
smlLibMemset(pItem, 0, sizeof(SmlItem_t));
alert.itemList->item = pItem;
////
if(pAlert->itemList->item->target_locURI!=NULL)
{
pItem->source = (SmlTargetPtr_t)smlLibMalloc(sizeof(SmlTarget_t));
pItem->source->locURI = smlString2Pcdata(pAlert->itemList->item->target_locURI);
pItem->source->locName = NULL;
}
if(pAlert->itemList->item->source_locURI!=NULL)
{
pItem->target = (SmlSourcePtr_t)smlLibMalloc(sizeof(SmlSource_t));
pItem->target->locURI = smlString2Pcdata(pAlert->itemList->item->source_locURI);
pItem->target->locName = NULL;
}
pItem->meta = (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t));
smlLibMemset(pItem->meta, 0, sizeof(SmlPcdata_t));
pItem->meta->contentType=SML_PCDATA_EXTENSION;
pItem->meta->extension=SML_EXT_METINF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -