LPCSTR CDataFactory::GetItemNums2String(DWORD dwDataIndex) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return ""; } if(lpDataItem->btData[0] == MAXBYTE) { return ""; // 只有试机号的一期 } m_pNumbers->SetItemData(0, lpDataItem->btData); LPCSTR lpszItemString = m_pNumbers->GetItemString(0); // 查询区段分隔符“+”所在位置 int nPos = -1, nLen = strlen(lpszItemString); for(int i=0; i<nLen; i++) { if(lpszItemString[i] == '+') { nPos = i; break; } } if(nPos == -1) { return lpszItemString; // 没有找到,则只有一个区 } if(g_pIData->GetCurrentSectionIndex() == 0) // 返回第二区段文本串 { // 去除前面的空格 nPos ++; while(lpszItemString[nPos] == ' ') nPos ++; strcpy(m_szTempBuf, &lpszItemString[nPos]); } else // 返回第一区段文本串 { memcpy(m_szTempBuf, lpszItemString, nPos); m_szTempBuf[nPos] = 0; // 去除后面的空格 nPos --; while(m_szTempBuf[nPos] == ' ') { m_szTempBuf[nPos] = 0; nPos --; } } return m_szTempBuf; }
DWORD CDataFactory::GetItemIssue(DWORD dwDataIndex) { LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } return lpDataItem->dwIssue; }
BYTE CDataFactory::GetItemMachineIndex(DWORD dwDataIndex) { LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } // 目前只有3D有机器信息 return lpDataItem->btData[3]; }
BYTE CDataFactory::GetItemBallIndex(DWORD dwDataIndex) { LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } // 目前只有3D有球信息 return lpDataItem->btData[4]; }
int _GetMRReplySize(Encap_Header *header) { Eip_Item *dataitem=_GetDataItem(header); if (dataitem==NULL) return(0); switch (dataitem->Type_Id) { case ItemId_UCM:return(dataitem->Length); case ItemId_ConnectedTP:return(dataitem->Length-sizeof(CIP_INT)); // size of packet id case ItemId_OTSocketInfo:return(dataitem->Length-sizeof(Eip_SII)); default:return(dataitem->Length); } }
MR_Reply *_GetMRReply(Encap_Header *header) { Eip_Item *dataitem=_GetDataItem(header); if (dataitem==NULL) return(NULL); switch (dataitem->Type_Id) { case ItemId_UCM:return((MR_Reply*)((char*)dataitem+sizeof(Eip_UDI))); case ItemId_ConnectedTP:return((MR_Reply*)((char*)dataitem+sizeof(Eip_CDI))); case ItemId_OTSocketInfo:return((MR_Reply*)((char*)dataitem+sizeof(Eip_SII))); default:return((MR_Reply*)((char*)dataitem+sizeof(Eip_Item))); } }
DWORD CDataFactory::GetItemTime(DWORD dwDataIndex) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } return lpDataItem->dwDataTime % 10000; }
DWORD CDataFactory::GetCount(BOOL bIgnoreOnlyTest) { if(m_bIsCurData && bIgnoreOnlyTest) // 当前数据并且忽略只含有试机号的数据 { if(m_dwCurUsedDataItemCount > 0 && _GetDataItem(DATA_INDEX_ONLYTESTNUMS) != NULL) { return m_dwCurUsedDataItemCount - 1; // 最后一期只有试机号没有开奖号 } } return m_dwCurUsedDataItemCount; }
DWORD CDataFactory::GetItemInitIndex(DWORD dwDataIndex) { ASSERT(m_bIsCurData); // 必须是当前数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } return lpDataItem->dwInitIndex; }
DWORD CDataFactory::GetItemDataTimeAndIssue(DWORD dwDataIndex, DWORD &dwIssue) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } dwIssue = lpDataItem->dwIssue; return lpDataItem->dwDataTime; }
BOOL CDataFactory::IsTestNumsItem(DWORD dwDataIndex) { if(dwDataIndex == DATA_INDEX_INVALID) dwDataIndex = DATA_INDEX_ONLYTESTNUMS; LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return FALSE; } return (lpDataItem->dwFlag & DATAITEM_FLAG_TESTNUM) ? TRUE : FALSE; }
Eip_CDI *_ConnectedSend( Eip_Session *session,Eip_Connection *connection, void *request,int size) { Eip_CAI adressitem; Eip_CDI dataitem; Eip_CDI *result=NULL; Encap_Header *reply=NULL; LogCip(LogTrace,"->Entering ConnectedSend \n"); // adressitem adressitem.Type_Id=ItemId_ConnectionBased; adressitem.Length=0; adressitem.CID=connection->OT_ConnID; // dataitem dataitem.Type_Id=ItemId_ConnectedTP; dataitem.Packet=++(connection->packet); dataitem.Length=size; reply=_SendData_WaitReply(session,EIP_SENDUNITDATA,(void*)&adressitem,NULL,(void*)&dataitem,request); if (reply!=NULL) { Eip_CDI *respdataitem =(Eip_CDI *)_GetDataItem(reply); if (respdataitem==NULL) { CIPERROR(EIP_Error,reply->Status,0); free(reply); LogCip(LogTrace,"!Exiting ConnectedSend with error : %s\n",_cip_err_msg); return(NULL); } if ((reply->Command!=EIP_SENDUNITDATA)||(respdataitem->Packet!=connection->packet)) { CIPERROR(Internal_Error,E_UnsolicitedMsg,0); free(reply); LogCip(LogTrace,"!Exiting ConnectedSend with error : %s\n",_cip_err_msg); return(NULL); } /* Result is OK */ CIPERROR(EIP_Error,reply->Status,0); result=malloc(sizeof(Eip_CDI)+respdataitem->Length); memcpy(result,respdataitem,sizeof(Eip_Item)+respdataitem->Length); LogCip(LogTrace,"<-Exiting ConnectedSend : size=%d (%p)\n",sizeof(Eip_Item)+respdataitem->Length,respdataitem); free(reply); return(result); } else { LogCip(LogTrace,"!Exiting ConnectedSend with no response\n"); return(NULL); } }
LPCSTR CDataFactory::GetItemIssueString(DWORD dwDataIndex) { LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return ""; } sprintf(m_szTempIssueStringBuf, "%0*lu", g_pIData->GetIssueLen(), lpDataItem->dwIssue); CHECK_STRING_STACK(m_szTempIssueStringBuf); return m_szTempIssueStringBuf; }
LPBYTE CDataFactory::GetItemTestNums(DWORD dwDataIndex) { if(dwDataIndex == DATA_INDEX_INVALID) dwDataIndex = DATA_INDEX_ONLYTESTNUMS; LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return NULL; } // 目前只有3D有试机号信息 return &(lpDataItem->btData[5]); }
DWORD CDataFactory::GetItemTestNumsValue(DWORD dwDataIndex) { if(dwDataIndex == DATA_INDEX_INVALID) dwDataIndex = DATA_INDEX_ONLYTESTNUMS; LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } // 目前只有3D有试机号信息 m_pNumbers->SetItemData(0, &(lpDataItem->btData[5])); return m_pNumbers->GetItemValue(0); }
LPBYTE CDataFactory::GetItemNums(DWORD dwDataIndex) { LPDATAITEM lpItem = _GetDataItem(dwDataIndex); if(lpItem == NULL) { return NULL; } if(m_bIsCurData && lpItem->btData[0] == MAXBYTE) { return NULL; // 只有试机号的一期 } return lpItem->btData; }
void CDataFactory::GetItemDateTime(DWORD dwDataIndex, CTime &tmDateTime) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return ; } DWORD dwDateTime = lpDataItem->dwDataTime; tmDateTime = CTime(2000 + dwDateTime / 100000000, (dwDateTime / 1000000) % 100, (dwDateTime / 10000) % 100, (dwDateTime / 100) % 100, dwDateTime % 100, 0); }
int CDataFactory::GetItemDayOfWeek(DWORD dwDataIndex) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return 0; } DWORD dwDateTime = lpDataItem->dwDataTime; CTime tmDateTime = CTime(2000 + dwDateTime / 100000000, (dwDateTime / 1000000) % 100, (dwDateTime / 10000) % 100, 0, 0, 0); return tmDateTime.GetDayOfWeek() - 1; }
LPCSTR CDataFactory::GetItemTimeString(DWORD dwDataIndex) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return ""; } DWORD dwDateTime = lpDataItem->dwDataTime % 10000; sprintf(m_szTempTimeStringBuf, "%02lu:%02lu", dwDateTime / 100, dwDateTime % 100); CHECK_STRING_STACK(m_szTempTimeStringBuf); return m_szTempTimeStringBuf; }
void CDataFactory::SetForecastNums(LPBYTE lpData) { if(lpData == NULL) // 清除预测行号码 { ZeroMemory(&m_stForcastItem, sizeof(m_stForcastItem)); } else // 设置预测行号码 { memcpy(m_stForcastItem.btData, lpData, MAX_NUMBER_COUNT); LPDATAITEM lpItem = _GetDataItem(DATA_INDEX_ONLYTESTNUMS); if(lpItem != NULL) { // 设置当期试机号数据,目前只有3D有 memcpy(&m_stForcastItem.btData[3], &lpItem->btData[3], 5); } m_stForcastItem.dwIssue = 1; // 只需不为0即可 } }
LPBYTE CDataFactory::GetItem2Nums(DWORD dwDataIndex) { ASSERT(!m_bIsCurData); // 必须是初始数据 LPDATAITEM lpDataItem = _GetDataItem(dwDataIndex); if(lpDataItem == NULL) { return NULL; } if(lpDataItem->btData[0] == MAXBYTE) { return NULL; // 只有试机号的一期 } if(g_pIData->GetCurrentSectionIndex() == 0) return &lpDataItem->btData[g_pIData->GetNumberCount(DATA_SOURCE_INIT)]; // 返回第二区段 else return lpDataItem->btData; // 返回第一区段 }