a
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
// NetWorkOper.h: interface for the CNetWorkOper class.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(AFX_NETWORKOPER_H__8C009DCD_7958_4C3F_8A25_EF1668377DFD__INCLUDED_)
|
||||
#define AFX_NETWORKOPER_H__8C009DCD_7958_4C3F_8A25_EF1668377DFD__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
#include "TcpClient.h"
|
||||
#include "cpp\socket\StdThread.h"
|
||||
#include <list>
|
||||
using namespace std;
|
||||
|
||||
#define MAX_SND_BUF 450
|
||||
#define MAX_RCV_CTRLBUF 1500
|
||||
typedef struct ST_SEND_DATA_INFO
|
||||
{
|
||||
BYTE ucDstType;
|
||||
UINT uiDevID;
|
||||
char* pData;
|
||||
WORD wDataLen;
|
||||
ST_SEND_DATA_INFO()
|
||||
{
|
||||
ucDstType = 0;
|
||||
uiDevID = 0;
|
||||
pData = 0;
|
||||
wDataLen = 0;
|
||||
}
|
||||
}STSendDataInfo;
|
||||
|
||||
typedef struct ST_RESP_DATA_INFO
|
||||
{
|
||||
char* pData; //用于接收数据的缓存地址
|
||||
int* pRecvLen; //实际接收数据的长度
|
||||
int iMaxRcvLen; //缓存的最大长度
|
||||
int iTimeout; //数据超时时间
|
||||
ST_RESP_DATA_INFO()
|
||||
{
|
||||
pData = NULL;
|
||||
pRecvLen = NULL;
|
||||
iMaxRcvLen = 0;
|
||||
iTimeout = 0;
|
||||
}
|
||||
|
||||
}STRespDataInfo;
|
||||
|
||||
enum EN_NETWORK_OPER_TYPE
|
||||
{
|
||||
EN_NETWORK_SEND = 0,
|
||||
EN_NETWORK_RECV
|
||||
};
|
||||
|
||||
typedef struct ST_CTRL_CMD_INFO
|
||||
{
|
||||
BYTE ucDataType; //表示响应状态
|
||||
char* pData; //数据缓冲区地址
|
||||
int iDataLen; //数据长度
|
||||
|
||||
}STCtrlCmdInfo,*LPSTCTRLCMDINFO;
|
||||
|
||||
typedef struct ST_PACKET_BASE
|
||||
{
|
||||
BYTE ucCmd;
|
||||
UINT32 uiDevID;
|
||||
BYTE ucDevType;
|
||||
}STPacketBase,*LPSTPACKETBASE;
|
||||
|
||||
typedef struct ST_REQUEST_PACKET
|
||||
{
|
||||
ST_PACKET_BASE clsPacketBase;
|
||||
HWND hWnd;
|
||||
DWORD dwMsgID;
|
||||
int iMaxRecvLen;
|
||||
int iTimeout;
|
||||
char* pData;
|
||||
WORD wDataLen;
|
||||
ST_REQUEST_PACKET()
|
||||
{
|
||||
clsPacketBase.uiDevID = 0xFFFFFFFF; //接受设备ID
|
||||
clsPacketBase.ucDevType = EN_DEV_CLOUND; //接收方类型
|
||||
iTimeout = 120000;
|
||||
iMaxRecvLen = MAX_RECV_MEASURE;
|
||||
dwMsgID = WM_NET_RESPONSE;
|
||||
}
|
||||
}STRequestPacket,*LPEQUESTPACKET;
|
||||
|
||||
typedef struct ST_RESPONSE_PACKET
|
||||
{
|
||||
ST_PACKET_BASE clsPacketBase;
|
||||
const char* pData;
|
||||
WORD wDataLen;
|
||||
}STResponsePacket,*LPRESPONSEPACKET;
|
||||
|
||||
// enum EN_NETWORK_OPER_RES
|
||||
// {
|
||||
// EN_NETWORK_OPER_SUCCESS = 0,
|
||||
// EN_NETWORK_OPER_LINE_BREAK,
|
||||
// EN_NETWORK_OPER_TIMEOUT,
|
||||
// EN_NETWORK_OPER_SOCKET_ERROR,
|
||||
// EN_NETWORK_OPER_FAILED
|
||||
// };
|
||||
|
||||
typedef void (* PNOTIFY_FUNC)(LPARAM, LPARAM, LPVOID);
|
||||
typedef void (* PNOTIFY_DEV_FUNC)(LPVOID, LPARAM, LPVOID);
|
||||
class CNetWorkOper : public ConsumerThread, public ProducerThread
|
||||
{
|
||||
public:
|
||||
CNetWorkOper();
|
||||
virtual ~CNetWorkOper();
|
||||
|
||||
bool Initialize();
|
||||
bool StartConnect(CString strDstIP, int iPort);
|
||||
bool StartWork();
|
||||
bool TransferOper(BYTE ucCmd, STSendDataInfo* pSendCtrl, bool bIsNeedResp, STRespDataInfo* pRespInfo, PNOTIFY_FUNC pNotifyFunc = NULL, LPVOID lpParam=NULL);
|
||||
bool GetLinkStatus(){return m_tcpClient->GetConnectStatus();}
|
||||
bool SendCtrlMsgDirect(BYTE ucCmd, UINT32 uiDevID, BYTE ucDevType, const char* pData, WORD wDataLen);
|
||||
int RecvMsgDirect(char* pData, int* pRecvLen, int iMaxRecvLen, int iTimeout);
|
||||
void RegisterDevNotify(PNOTIFY_DEV_FUNC pNotfiy,LPVOID pWnd){m_pDevNotifyFunc = pNotfiy;m_pDevNotfiyParam = pWnd;}
|
||||
void SetSuspendForThread(bool bIsSuspend);/*{m_bIsSuspend = bIsSuspend;}*/
|
||||
bool SendLoginMsgBrocast();//发送广播的登录消息
|
||||
bool ProcPlcStatus(char* pData, int iLen);//其实这里使用回调函数效果会更好
|
||||
void ClearNotfiyFuncInfo();
|
||||
|
||||
void PutRequestPacket(const STRequestPacket& clsRequestPacket);
|
||||
|
||||
void RegeditRealMsgCall(HWND hWnd);
|
||||
|
||||
void UnRegeditRealMsgCall(HWND hWnd);
|
||||
|
||||
CRITICAL_SECTION* GetNetCriticalSection()
|
||||
{
|
||||
return &m_netCs;
|
||||
}
|
||||
protected:
|
||||
//清空此次发送相关的信息
|
||||
void ClearSendInfo();
|
||||
// void ClearNotfiyFuncInfo();
|
||||
// static UINT StartProcFunc(LPVOID lParam);
|
||||
|
||||
void ReleaseData(void* pData);
|
||||
|
||||
void ConsumeDataFromQue(void * pData);
|
||||
|
||||
virtual void ThreadFunction();// 获取实时消息
|
||||
public:
|
||||
CTcpClient* m_tcpClient;
|
||||
protected:
|
||||
bool m_bIsRunning;
|
||||
|
||||
CWinThread* m_pThread;
|
||||
CRITICAL_SECTION m_MutexSec;
|
||||
bool m_bIsTransfer;
|
||||
STSendDataInfo m_stSendCtrlInfo;
|
||||
STRespDataInfo m_stRespDataInfo;
|
||||
bool m_bIsNeedResp;
|
||||
bool m_bIsNeedSend;
|
||||
BYTE m_ucCmd;
|
||||
PNOTIFY_FUNC m_pNotifyFunc;
|
||||
PNOTIFY_DEV_FUNC m_pDevNotifyFunc;
|
||||
LPVOID m_pNotifyParam;
|
||||
char m_chSendBuf[MAX_SND_BUF];
|
||||
char m_chRcvCtrlBuf[MAX_RCV_CTRLBUF];
|
||||
LPVOID m_pDevNotfiyParam;
|
||||
bool m_bIsSuspend;
|
||||
bool m_bIsGetDevAddr; //是否获得 主机地址,用于WIFI直连
|
||||
|
||||
CRITICAL_SECTION m_netCs;
|
||||
|
||||
CRITICAL_SECTION m_realHwndCs;
|
||||
list<HWND> m_listRealHwnd;
|
||||
};
|
||||
|
||||
#endif // !defined(AFX_NETWORKOPER_H__8C009DCD_7958_4C3F_8A25_EF1668377DFD__INCLUDED_)
|
||||
Reference in New Issue
Block a user