int AskForResend(LinkC_Socket *Socket, int Count){ ConfirmationMessage confirm; // 数据结构 confirm.isRecved = 0; // 说明没有收到 confirm.Count = Count; // 说明哪个包没有收到 int Length = PackMessage((void *)&confirm,sizeof(confirm),Socket,Socket->SendBuffer); // 打包数据 ___LinkC_Send(Socket,Socket->SendBuffer,Length,MSG_DONTWAIT); // 发送数据 return 0; // 返回成功 }
int CPushService::Push(const char *psToken, const char *psPayload) { char asTokenBytes[33]; char asMessage[256]; int iMsgLength = 0; Token2Bytes(psToken, asTokenBytes); iMsgLength = PackMessage(asMessage, 0, asTokenBytes, psPayload); struct timeval stStartTime, stEndTime; gettimeofday(&stStartTime, NULL); int iLen = 0; bool bIsReconnected = false; if(m_ucDeviceType != I_DEVICE_DAILY_BUILD) { iLen = g_cApnsMgr.Write(asMessage, iMsgLength, bIsReconnected); } else { iLen = g_cApnsDMgr.Write(asMessage, iMsgLength, bIsReconnected); } LOG_DBG("payload |%s|, send type|%u| send Len|%d|, IsReconnected|%d|, m_ucDeviceType|%u|", psPayload, m_ucDeviceType, iLen, bIsReconnected, m_ucDeviceType); //添加监控 if(bIsReconnected) { MyMonitor(MON_APNS_INIT_SSL); } gettimeofday(&stEndTime, NULL); int iExecTimeMs = 1000 * (stEndTime.tv_sec - stStartTime.tv_sec) + (stEndTime.tv_usec - stEndTime.tv_usec) / 1000; LOG_DBG("ssl_write Len:%d exec_time:|%d| TknSeq|%llu| uin|%u|", iLen, iExecTimeMs, m_stMsg.ullPushID,m_ulUin); if(iLen != iMsgLength) { LOG_ERR("send to apns error send_len|%d|,msgLen|%d|,send type|%u|,TknSeq|%llu|,uin|%u|,errno|%d|", iLen, iMsgLength, m_ucDeviceType,m_stMsg.ullPushID,m_ulUin, errno); MyMonitor(MON_PUSH_FAIL); return ERR_CONNECT_APNS_FAIL; } MyMonitor(MON_PUSH_SUCC); return 0; }