|
- #include "StdAfx.h"
- #include "ProcessDataControl.h"
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //处理类型
- #define IDT_IMMEDIATE 0x0101 //同步数据
- #define IDT_ASYNCHRONISM 0x0201 //异步数据
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //函数定义
- CProcessSendData::CProcessSendData(HWND hWndServer, HWND hWndClient)
- {
- //设置变量
- m_hWndServer = hWndServer;
- m_hWndClient = hWndClient;
-
- return;
- }
-
- //析构函数
- CProcessSendData::~CProcessSendData()
- {
- }
-
- //是否连接
- bool CProcessSendData::IsConnect()
- {
- return IsWindow(m_hWndServer) ? true : false;
- }
-
- //获取窗口
- HWND CProcessSendData::GetClientHwnd()
- {
- return m_hWndClient;
- }
-
- //获取窗口
- HWND CProcessSendData::GetServerHwnd()
- {
- return m_hWndServer;
- }
-
- //设置窗口
- bool CProcessSendData::SetClientHwnd(HWND hWndClient)
- {
- //设置变量
- m_hWndClient = NULL;
-
- //窗口效验
- if ((hWndClient != NULL) && (IsWindow(hWndClient)))
- {
- m_hWndClient = hWndClient;
- return true;
- }
-
- return false;
- }
-
- //设置窗口
- bool CProcessSendData::SetServerHwnd(HWND hWndServer)
- {
- //设置变量
- m_hWndServer = NULL;
-
- //窗口效验
- if ((hWndServer != NULL) && (IsWindow(hWndServer)))
- {
- m_hWndServer = hWndServer;
- return true;
- }
-
- return false;
- }
-
- //设置窗口
- bool CProcessSendData::SetServerHwnd(LPCTSTR pszClassName)
- {
- //效验参数
- ASSERT(pszClassName != NULL);
- if (pszClassName == NULL) return false;
-
- //设置变量
- m_hWndServer = FindWindow(pszClassName, NULL);
-
- return (m_hWndServer != NULL);
- }
-
- //发送数据
- bool CProcessSendData::SendData(WORD wMainCmdID, WORD wSubCmdID)
- {
- //效验参数
- ASSERT(IsWindow(m_hWndServer));
- if (IsWindow(m_hWndServer) == FALSE) return false;
-
- //构造数据
- IPC_Head IPCHead;
- IPCHead.wVersion = IPC_VER;
- IPCHead.wSubCmdID = wSubCmdID;
- IPCHead.wMainCmdID = wMainCmdID;
- IPCHead.wPacketSize = sizeof(IPC_Head);
-
- //发送数据
- COPYDATASTRUCT CopyDataStruct;
- CopyDataStruct.lpData = &IPCHead;
- CopyDataStruct.dwData = IDT_ASYNCHRONISM;
- CopyDataStruct.cbData = IPCHead.wPacketSize;
- ::SendMessage(m_hWndServer, WM_COPYDATA, (LPARAM)m_hWndClient, (WPARAM)&CopyDataStruct);
-
- return true;
- }
-
- //发送数据
- bool CProcessSendData::SendData(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(IsWindow(m_hWndServer));
- if (IsWindow(m_hWndServer) == FALSE) return false;
-
- //构造数据
- IPC_Buffer IPCBuffer;
- IPCBuffer.Head.wVersion = IPC_VER;
- IPCBuffer.Head.wSubCmdID = wSubCmdID;
- IPCBuffer.Head.wMainCmdID = wMainCmdID;
- IPCBuffer.Head.wPacketSize = sizeof(IPCBuffer.Head);
-
- //附加数据
- if (pData != NULL)
- {
- //效验长度
- ASSERT(wDataSize <= sizeof(IPCBuffer.cbBuffer));
- if (wDataSize > sizeof(IPCBuffer.cbBuffer)) return false;
-
- //拷贝数据
- IPCBuffer.Head.wPacketSize += wDataSize;
- CopyMemory(IPCBuffer.cbBuffer, pData, wDataSize);
- }
-
- //发送数据
- COPYDATASTRUCT CopyDataStruct;
- CopyDataStruct.lpData = &IPCBuffer;
- CopyDataStruct.dwData = IDT_ASYNCHRONISM;
- CopyDataStruct.cbData = IPCBuffer.Head.wPacketSize;
- ::SendMessage(m_hWndServer, WM_COPYDATA, (LPARAM)m_hWndClient, (WPARAM)&CopyDataStruct);
-
- return true;
- }
-
- //执行命令
- bool CProcessSendData::TransferCommand(WORD wMainCmdID, WORD wSubCmdID, VOID * pData, WORD wDataSize)
- {
- //效验参数
- ASSERT(IsWindow(m_hWndServer));
- if (IsWindow(m_hWndServer) == FALSE) return false;
-
- //构造数据
- IPC_Buffer IPCBuffer;
- IPCBuffer.Head.wVersion = IPC_VER;
- IPCBuffer.Head.wSubCmdID = wSubCmdID;
- IPCBuffer.Head.wMainCmdID = wMainCmdID;
- IPCBuffer.Head.wPacketSize = sizeof(IPCBuffer.Head);
-
- //附加数据
- if (pData != NULL)
- {
- //效验长度
- ASSERT(wDataSize <= sizeof(IPCBuffer.cbBuffer));
- if (wDataSize > sizeof(IPCBuffer.cbBuffer)) return false;
-
- //拷贝数据
- IPCBuffer.Head.wPacketSize += wDataSize;
- CopyMemory(IPCBuffer.cbBuffer, pData, wDataSize);
- }
-
- //发送数据
- COPYDATASTRUCT CopyDataStruct;
- CopyDataStruct.lpData = &IPCBuffer;
- CopyDataStruct.dwData = IDT_IMMEDIATE;
- CopyDataStruct.cbData = IPCBuffer.Head.wPacketSize;
- ::SendMessage(m_hWndServer, WM_COPYDATA, (LPARAM)m_hWndClient, (WPARAM)&CopyDataStruct);
-
- return true;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CProcessRecvData::CProcessRecvData()
- {
- //设置变量
- m_pIIPCRecvDataSink = NULL;
-
- return;
- }
-
- //析构函数
- CProcessRecvData::~CProcessRecvData()
- {
- }
-
- //设置接口
- bool CProcessRecvData::SetProcessTradeSink(IUnknownEx * pIUnknownEx)
- {
- //设置接口
- if (pIUnknownEx != NULL)
- {
- //查询接口
- ASSERT(QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IIPCRecvDataSink) != NULL);
- m_pIIPCRecvDataSink = QUERY_OBJECT_PTR_INTERFACE(pIUnknownEx, IIPCRecvDataSink);
-
- //成功判断
- if (m_pIIPCRecvDataSink == NULL) return false;
- }
- else m_pIIPCRecvDataSink = NULL;
-
- return true;
- }
-
- //消息处理
- bool CProcessRecvData::OnCopyData(HWND hWndSend, COPYDATASTRUCT * pCopyDataStruct)
- {
- //效验接口
- ASSERT(m_pIIPCRecvDataSink != NULL);
- if (m_pIIPCRecvDataSink == NULL) return false;
-
- //效验参数
- ASSERT(pCopyDataStruct->cbData >= sizeof(IPC_Head));
- if (pCopyDataStruct->cbData < sizeof(IPC_Head)) return false;
-
- //效验数据
- IPC_Head * pHead = (IPC_Head *)pCopyDataStruct->lpData;
- ASSERT((pHead->wVersion == IPC_VER) && (pHead->wPacketSize == pCopyDataStruct->cbData));
- if ((pHead->wVersion != IPC_VER) || (pHead->wPacketSize != pCopyDataStruct->cbData)) return false;
-
- //数据处理
- switch (pCopyDataStruct->dwData)
- {
- case IDT_IMMEDIATE: //同步数据
- {
- //数据处理
- WORD wDataSize = pHead->wPacketSize - sizeof(IPC_Head);
- m_pIIPCRecvDataSink->OnImmediateData(pHead->wMainCmdID, pHead->wSubCmdID, pHead + 1, wDataSize, hWndSend);
-
- return true;
- }
- case IDT_ASYNCHRONISM: //异步数据
- {
- //数据处理
- WORD wDataSize = pHead->wPacketSize - sizeof(IPC_Head);
- m_pIIPCRecvDataSink->OnAsynchronismData(pHead->wMainCmdID, pHead->wSubCmdID, pHead + 1, wDataSize, hWndSend);
-
- return true;
- }
- }
-
- return false;
- }
-
- //////////////////////////////////////////////////////////////////////////////////
|