📄 cscphysvr.cpp
字号:
#include "cscphysvr.h"CCSCPhySvr::CCSCPhySvr(int nPort,char * pszHostName,int nSvrPort) : m_client(nPort,pszHostName) ,m_server(nSvrPort){ m_nStatus = -1;}CCSCPhySvr::~CCSCPhySvr(){ Disconnect();}bool CCSCPhySvr::Connect(){ bool bRet = false; //open IO port if (m_server.Init() && m_client.Init()) { pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); m_nStatus = 0; if (pthread_create(&m_hThread,&attr,Listen,(void *)this) == 0) { bRet = true; } else { m_nStatus = -1; m_server.Destroy(); m_client.Destroy(); } pthread_attr_destroy(&attr); } return bRet;}void CCSCPhySvr::Disconnect(){ if (m_nStatus != -1) { m_nStatus = -1; if (m_hThread) { cout << "CCSCPhySvr: " << m_hThread << endl; pthread_cancel(m_hThread); } m_server.Destroy(); m_client.Destroy(); }}bool CCSCPhySvr::Reset(){ Disconnect(); sleep(2); return Connect();}void *Listen(void *p){ CCSCPhySvr * pPS= (CCSCPhySvr *)p; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); BYTE aBuf[1024]; timeval tv; sleep(5); while(1) { if (pPS->Status()!=-1) { DWORD dwPeerIPAddr; int nLen = pPS->m_client.Recv(dwPeerIPAddr,aBuf); if (nLen > 3) {/* cout << "<-{" << "[" << dwPeerIPAddr<<"]" << nLen << "}: "; for (int nnn=0; nnn<nLen; nnn++) { char c[16]; sprintf(c," %02x ",aBuf[nnn]); cout << c; } cout << endl;*/ gettimeofday(&tv,NULL); if (aBuf[0] == 0) { WORD* pw = (WORD *)&aBuf[1]; for (WORD w=0; ((w < *pw / 31) && ((nLen-3)-w*31)>=4); w++) { WORD wLen = (((nLen-3)-w*31)>31)?31:((nLen-3)-w*31); CDataNode* pDN = new CDataNode(tv,&aBuf[w*31+3],wLen); DWORD ddddwwww = 1; pPS->m_pool.AddRecvNode(ddddwwww,pDN); } } else { CDataNode* pDN = new CDataNode(tv,aBuf,nLen); pPS->m_pool.AddRecvNode(dwPeerIPAddr,pDN); } } else usleep(20000); //10 milliseconds } usleep(10000); //10 milliseconds }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -