📄 momentvaluedlg.cpp
字号:
int err = 0, iLen,send;
CString strSndXml,strCustomerID,strSndTmp,strBranch,strFileBranch,strSndData,strRec;
CSocket sock;
GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
// (1)make socket
if (!err) if (!sock.Create()) err = 1;
// (2)connet to socket
if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
//(3)send infomation
if(!err)
{
strSndXml.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"measure\"><customer handle=\"%s\">00</customer><items>", strCustomerID);
for(int i=0; i<D_KYOKUNUMS; i++)
{
if(m_dKyoku[i].iCnt)
{
strBranch.Format("strBranch%d",i+1);
strFileBranch.Format("Branch%d",i+1);
GetPrivateProfileString("ConfigSet",strFileBranch,"",strBranch.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
// memcpy(&chBranch[i][0],strBranch,4);
// TRACE("chBranch[%d][]==%s\n",i,&chBranch[i][0]);
strSndTmp.Format("<item id=\"%s\" handle=\"%d\"><data><value>%8ld</value><datetime>%s +0900</datetime></data></item>", strBranch, atoi(strBranch),(long)(m_dKyoku[i].dElectricityAve+0.5),chTime);
TRACE("strSndTmp==%s\n",strSndTmp);
strSndXml += strSndTmp;
TRACE("strSndXml==%s\n",strSndXml);
}
}
strSndXml += "</items></report>";
TRACE("strSndXml==%s\n",strSndXml);
iLen = strSndXml.GetLength();
strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
//(3)サーバーに送信
send = sock.Send(strSndData, strSndData.GetLength());
if (send == SOCKET_ERROR) {err=1;}
if(!err)
{
char *p = new char[1024];
if(p)
{
int n = 0;
memset(p, 0, 1024);
while((n = sock.Receive(p, 1023)) > 0)
{
strRec += p;
memset(p, 0, 1024);
}
delete p;
}
}
//to make XML file
FILE *fpCsv=NULL;
fpCsv=fopen("sample.xml", "a");
int fint = strRec.Find("<?xml");
int fint2 = strRec.Find("</report>");
strRec = strRec.Mid(fint,(fint2-fint+9));
fprintf(fpCsv,strRec);
fclose(fpCsv);
}
Sleep(1);
//(4)close socket
sock.Close();
return 0;
}
void CMomentValueDlg::XMLDOMParserToData()
{
typedef MSXML2::IXMLDOMNodeListPtr INodeListPtr;
typedef MSXML2::IXMLDOMNodePtr INodePtr;
typedef MSXML2::IXMLDOMElementPtr IElementPtr;
HRESULT nResult;
CoInitialize(NULL);
MSXML2::IXMLDOMDocument2Ptr pDoc;
nResult = pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument40) );
(nResult == 0) ? 0: throw nResult;
pDoc->async = VARIANT_FALSE;
// to load XML file
nResult = pDoc->load("sample.xml");
INodeListPtr plName = pDoc->getElementsByTagName("item");
for(int p=0;p<D_KYOKUNUMS;p++)
{
if(!(m_timeValueList[p].IsEmpty())){
m_timeValueList[p].RemoveAll();
}
}
int k = plName->Getlength();
for(int i=0; i<k; i++)
{
IElementPtr peName = plName->Getitem(i);//to get peName<item>
int len = peName->Getattributes()->Getlength();//to get the property of item
_variant_t id = peName->Getattributes()->Getitem(0)->Gettext();//get id
_variant_t handle = peName->Getattributes()->Getitem(1)->Gettext();//get handle
CString tempIdStr =(LPCSTR)_bstr_t(id.bstrVal);//get id
CString tempHandleStr =(LPCSTR)_bstr_t(handle.bstrVal);//get handle
int q = peName->GetchildNodes()->Getlength();
INodeListPtr data = peName->getElementsByTagName("data");//to get parameter<data>
int m = data->Getlength();//get the number of <data>
for(int n=0;n<m;n++)
{
_variant_t datatime = data->Getitem(n)->GetfirstChild()->Gettext();//get parameter<datatime>
_variant_t interval = data->Getitem(n)->GetlastChild()->Gettext();//get parameter<interval>
CString tempDataStr =(LPCSTR)_bstr_t(datatime.bstrVal);//get parameter<datatime>
CString tempinterval =(LPCSTR)_bstr_t(interval.bstrVal);//get parameter<interval>
D_TIMEVALUE_DATA TimeValueData;
TimeValueData.dTime = tempDataStr;
TimeValueData.dValue = 0;
m_timeValueList[atoi(tempIdStr)-1].AddTail(TimeValueData);//put analysised data(xml) to List
}
}
}
void CMomentValueDlg::ToGetLostData()
{
POSITION positionSend,positionReceive;
int nSendData,nReceiveData;
D_TIMEVALUE_DATA tempSendDataStruct,tempReceiveStruct;
CString sendTimeStr,receiveTimeStr;
for(int q=0;q<D_KYOKUNUMS;q++)
{
if((this->m_tempTimeValueList[q].GetCount())>=288)
{
//this->m_tempTimeValueList[q].RemoveAll();
POSITION posi = this->m_tempTimeValueList[q].FindIndex(0);
this->m_tempTimeValueList[q].RemoveAt(posi);
}
}
for(int w=0;w<D_KYOKUNUMS;w++)
{
int m = this->m_pastTimeValueList[w].GetCount();
if(this->m_pastTimeValueList[w].GetCount()>=288)
{
POSITION pos = this->m_pastTimeValueList[w].FindIndex(0);
this->m_pastTimeValueList[w].RemoveAt(pos);
//m_pSubEcoPowerMeter->m_pastTimeValueList[0].RemoveAll();
}
}
for(int k=0;k<D_KYOKUNUMS;k++)
{
//サーバーに送信のList先头要素取得
positionSend = this->m_pastTimeValueList[k].GetHeadPosition();
nSendData = this->m_pastTimeValueList[k].GetCount();
TRACE("送信回数==%d\n",nSendData);
//receive
nReceiveData = this->m_timeValueList[k].GetCount();
TRACE("受信回数==%d\n",nReceiveData);
if(nSendData != 0 && nReceiveData != 0)
{
for(int i = 0;i<nSendData;i++)
{
tempSendDataStruct = this->m_pastTimeValueList[k].GetNext(positionSend);
sendTimeStr = tempSendDataStruct.dTime;
//サーバーに受信のList先头要素取得
positionReceive = this->m_timeValueList[k].GetHeadPosition();
for(int j = 0;j<nReceiveData;j++)
{
tempReceiveStruct = (this->m_timeValueList[k]).GetNext(positionReceive);
receiveTimeStr = tempReceiveStruct.dTime;
receiveTimeStr.Replace(" +0900","");
if(sendTimeStr.Compare(receiveTimeStr) == 0){
//ringbuffer保存
this->m_tempTimeValueList[k].AddTail(tempSendDataStruct);
}
}
}
}
}
}
void CMomentValueDlg::SendTcpIpLostData()
{
CString strCustomerID,strSndXmlHead,strBranch,strFileBranch,strSndItem,strSndItems(""),strTime,strTemp,strSndXmlData(""),strSndXmlTail,strSndXml,strSndData;
D_TIMEVALUE_DATA tempStruct;
long sendValue;
int err = 0,iLen,send;
CSocket sock;
GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
//Xml header
strSndXmlHead.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"measure\"><customer handle=\"%s\">00</customer><items>",strCustomerID);
for(int i=0;i<D_KYOKUNUMS;i++)
{
POSITION posionHead = m_tempTimeValueList[i].GetHeadPosition();
if(m_dKyoku[i].iCnt)
{
strBranch.Format("strBranch%d",i+1);
strFileBranch.Format("Branch%d",i+1);
GetPrivateProfileString("ConfigSet",strFileBranch,"",strBranch.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
strSndItem.Format("<item id=\"%s\" handle=\"%d\">",strBranch,atoi(strBranch));
while(posionHead){
tempStruct = m_tempTimeValueList[i].GetNext(posionHead);
sendValue = tempStruct.dValue;
strTime = tempStruct.dTime;
TRACE("SendketsusonData2------->sendValue(i==%d)==%ld\n",i,sendValue);
strTemp.Format("<data><value>%8ld</value><datetime>%s +0900</datetime></data>\n",sendValue,strTime);
strSndXmlData += strTemp;
}
strSndXmlData = strSndItem + strSndXmlData + "</item>" ;
strSndItems += strSndXmlData;
strSndXmlData.Empty();
}
}
//XML tail
strSndXmlTail = "</items></report>";
strSndXml = strSndXmlHead + strSndItems + strSndXmlTail;
// (1)make sock
if (!err) if (!sock.Create()) err = 1;
// (2)connect to sock
if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
//(3)send data
if(!err)
{
iLen = strSndXml.GetLength();
strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
send = sock.Send(strSndData, strSndData.GetLength());
//------------------------------------------------------------------------------------------------
FILE *file = NULL;
file = fopen("test.txt","a");
fprintf(file,strSndXml);
fclose(file);
//------------------------------------------------------------------------------------------------
if (send == SOCKET_ERROR) {err=1;}
}
Sleep(1);
//(4)close sock
sock.Close();
}
void CMomentValueDlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
CString strTime;
char chTime[200];
CTime cTime;
int year, month, day, hour, min, sec;
cTime = CTime::GetCurrentTime();
year = cTime.GetYear();
month = cTime.GetMonth();
day = cTime.GetDay();
hour = cTime.GetHour();
min = cTime.GetMinute();
sec = cTime.GetSecond();
strTime.Format("%04d-%02d-%02d %02d:%02d:00",year,month,day,hour,min);
memset(chTime,0,sizeof(chTime));
strncpy(chTime,strTime,strTime.GetLength()+1);//get time
this->SendTcpIpStop(chTime);
this->m_serial->Close();
KillTimer(1);
KillTimer(2);
}
int CMomentValueDlg::SendTcpIpStop(char chTime[])
{
CString strSndXmlHead,strCustomerID,strBranch,strItem,strSndXmlTail,strSndXml,strSndData,strItems("");
GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
int err=0,iLen,send;
CSocket sock;
if (!err) if (!sock.Create()) err = 1;
if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
if(!err)
{
//Xml header
strSndXmlHead.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"stop\"><customer handle=\"%s\">00</customer><items>",strCustomerID);
for(int i=0; i<D_KYOKUNUMS; i++)
{
// strBranch = (LPTSTR)(&chBranch[i][0]);
// TRACE("strBranch = %s\n",strBranch);
strBranch = strBranchUsed[i];
TRACE("strBranch = %s\n",strBranch);
if(!strBranch.IsEmpty()&&strBranch!="")
{
TRACE("strBranch = %s\n",strBranch);
CString strTemp ;
strTemp.Format("%d",i);
TRACE("%s\n",strTemp);
strItem.Format("<item id=\"%s\" handle=\"%d\"><data><datetime>%s +0900</datetime></data></item>",strBranch,atoi(strBranch),chTime);
strItems+=strItem;
strItem.Empty();
}
}
strSndXmlTail = "</items></report>";
strSndXml = strSndXmlHead + strItems + strSndXmlTail;
iLen = strSndXml.GetLength();
strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
//----------------------------------------------------------------------------
FILE *file = NULL;
file = fopen("SendTcpIpStop.txt","a");
fprintf(file,strSndData);
fclose(file);
//----------------------------------------------------------------------------
//(3)send data to server
send = sock.Send(strSndData, strSndData.GetLength());
if (send == SOCKET_ERROR) {err=1;}
}
Sleep(1);
//(4)close sock
sock.Close();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -