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

📄 sh_mailslot.cpp

📁 rsa算法打的一个包
💻 CPP
字号:
// SH_Mailslot.cpp: implementation of the SH_Mailslot class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SH_Mailslot.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SH_Mailslot::SH_Mailslot()
{
    m_hMailslot = INVALID_HANDLE_VALUE;
    
    memset(&m_RO,0,sizeof(OVERLAPPED));
	memset(&m_SO,0,sizeof(OVERLAPPED));

	m_RO.hEvent = CreateEvent(NULL, true, false, NULL);
	m_SO.hEvent = CreateEvent(NULL, true, false, NULL);
}

SH_Mailslot::~SH_Mailslot()
{
    Close();

    if(m_RO.hEvent != INVALID_HANDLE_VALUE)
		CloseHandle(m_RO.hEvent);

	if(m_SO.hEvent != INVALID_HANDLE_VALUE)
		CloseHandle(m_SO.hEvent);

}

BOOL SH_Mailslot::CreateReceiver(const char *name,int timeout)
{
    m_hMailslot = CreateMailslot(name,0,timeout,NULL);

    if(m_hMailslot == INVALID_HANDLE_VALUE)
    {
        TRACE("SH_Mailslot open failed.Error no is %d\n",GetLastError());
    }
    return IsOpen();
}

BOOL SH_Mailslot::CreateSender(const char *name)
{
    m_hMailslot = CreateFile(name,
		                     GENERIC_READ | GENERIC_WRITE,
		                     FILE_SHARE_READ|FILE_SHARE_WRITE,
		                     NULL,
		                     OPEN_EXISTING,
		                     FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,	
		                     NULL);
    if(m_hMailslot == INVALID_HANDLE_VALUE)
    {
        TRACE("SH_Mailslot open failed.Error no is %d\n",GetLastError());
    }
    return IsOpen();
}

BOOL SH_Mailslot::Read(char * buf,int len)
{
    DWORD cbMessage, cMessage, cbRead; 
    BOOL  bRet; 
    LPSTR lpszBuffer; 
 
    cbMessage = cMessage = cbRead = 0; 

    if(!GetMailslotInfo(m_hMailslot,(LPDWORD)NULL,&cbMessage,&cMessage,(LPDWORD)NULL))
    {
        TRACE("SH_Mailslot get mailslot info failed.Error no is %d\n",GetLastError());
        return FALSE;             
    }
 
    if (cbMessage == MAILSLOT_NO_MESSAGE) 
        return FALSE; 
 
    if((int)cbMessage > len)
        OutputDebugString("SH_Mailslot:Not enough buffer space\n");

    lpszBuffer = (LPSTR)GlobalAlloc(GPTR,cbMessage); 
    
    if( NULL == lpszBuffer )
        return FALSE;
    
    lpszBuffer[0] = '\0'; 

    bRet = ReadFile(m_hMailslot,lpszBuffer,cbMessage,&cbRead,&m_RO); 

    if(bRet)
    {
        int cbsize = len > (int)cbRead ? (int)cbRead:len;
        memcpy(buf,lpszBuffer,cbsize);
    }
    else
        TRACE("SH_Mailslot Read failed.Error no is %d\n",GetLastError());

    GlobalFree((HGLOBAL) lpszBuffer); 
    return bRet; 
}

BOOL SH_Mailslot::Write(const char * buf,int len)
{
    DWORD written = 0;

    if(m_hMailslot == INVALID_HANDLE_VALUE)
        return FALSE;

    if(!WriteFile(m_hMailslot,buf,len,&written,&m_SO))
    {
        TRACE("SH_Mailslot Write failed.Error no is %d\n",GetLastError());
        return FALSE;
    }
    return TRUE;
}

HANDLE SH_Mailslot::GetSafeHandle() const
{
    return m_hMailslot;
}

VOID SH_Mailslot::Close()
{
    if(IsOpen())
    {
        CloseHandle(m_hMailslot);
        m_hMailslot = INVALID_HANDLE_VALUE;
    }
}

BOOL SH_Mailslot::IsOpen()
{
    return (BOOL)(m_hMailslot != INVALID_HANDLE_VALUE);
}


⌨️ 快捷键说明

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