⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipcserver.cpp

📁 EVC编写的WINCE下进程通讯程序服务器端
💻 CPP
字号:
// IPCServer.cpp : implementation file
//

#include "stdafx.h"
#include "IPC_MSGServer.h"
#include "IPCServer.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CIPCServer

CIPCServer::CIPCServer()
{
	m_SessionHandle = 0;
	m_Active = false;
	//注册消息常量
	m_ServerDisConnectHwnd = RegisterWindowMessage(IPCServerDisconnecting);
	m_ConnectRequestHwnd = RegisterWindowMessage(IPCConnectRequest);
	m_ConnectResposeHwnd = RegisterWindowMessage(IPCConnectRespose);
	m_ClientDisConnectHwnd = RegisterWindowMessage(IPCClientDisconnecting);
}

CIPCServer::~CIPCServer()
{
}


BEGIN_MESSAGE_MAP(CIPCServer, CWnd)
	//{{AFX_MSG_MAP(CIPCServer)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CIPCServer message handlers


/*
*函数介绍:打开服务器,处于监听状态
*入口参数:parentWnd 指定创建此类的窗口指针
*出口参数:无
*返回值:  无
*/
void CIPCServer::Open(CWnd *parentWnd)
{
	if (!m_Active)
	{
		//注册连接会话的消息标识符
		m_SessionHandle = RegisterWindowMessage(m_SessionName);
		m_ParentWnd = parentWnd;
		m_Active = true;
	}
}	


/*
*函数介绍:关闭服务器
*入口参数:无
*出口参数:无
*返回值:  无
*/
void CIPCServer::Close()
{
	if (m_Active)
	{
		//广播服务器断开的消息
		::SendMessage(HWND_BROADCAST, m_ServerDisConnectHwnd, WPARAM(m_hWnd),
			LPARAM(m_SessionHandle));
		m_Active = false;
	}
}


/*
*函数介绍:向客户端进程发送数据
*入口参数:MsgPointer: 数据指针
		   AWinHwnd: 客户端窗口句柄
		   ASize: 数据大小
*出口参数:无
*返回值:  无
*/
void CIPCServer::SendMsg(LPVOID MsgPointer, HWND AWinHwnd, DWORD ASize)
{
	COPYDATASTRUCT copyDataStruct;

	copyDataStruct.dwData = 0;
	copyDataStruct.cbData = ASize;
	copyDataStruct.lpData = MsgPointer;
	//向客户端窗口发送WM_COPYDATA消息
	::SendMessage(AWinHwnd, WM_COPYDATA, m_SessionHandle,
		LPARAM(&copyDataStruct));
}


/*
*函数说明:全局消息处理函数
*/
LRESULT CIPCServer::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	LPVOID  MsgPointer;
	HWND    ClientHwnd;
	DWORD   bufLen;

	//根据消息种类分别处理
	if ((message == WM_COPYDATA) && (wParam = m_SessionHandle))
	{
		//如果是WM_CopyData 消息
		MsgPointer = ((PCOPYDATASTRUCT)lParam)->lpData;
		ClientHwnd = HWND(((PCOPYDATASTRUCT)lParam)->dwData);
		bufLen = ((PCOPYDATASTRUCT)lParam)->cbData;

		//此时,处理接收事件
		m_ServerDataArrive(m_ParentWnd, MsgPointer,bufLen, ClientHwnd);

	}
	else if ((message == m_ConnectRequestHwnd) && (lParam = m_SessionHandle))
	{
		//如果是客户端连接请求消息时
		if (m_Active)
		{
			//得到客户端窗口句柄
			ClientHwnd = (HWND)wParam;
			if (ClientHwnd != 0)
			{
				::SendMessage(ClientHwnd, m_ConnectResposeHwnd, WPARAM(m_hWnd), 0);

				//触发连接事件
				m_ServerConnected(m_ParentWnd, ClientHwnd);
			}
		}
	}
	else if ((message == m_ClientDisConnectHwnd) && (lParam = m_SessionHandle))
	{
		//如果是客户端断开连接时
		ClientHwnd = (HWND)wParam;
		::SendMessage(ClientHwnd, m_ServerDisConnectHwnd, WPARAM(m_hWnd), 0);

		//触发断开事件
	}
	return CWnd::WindowProc(message, wParam, lParam);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -