/////////////////////////////////////////////////////////////////////
//
// Agus Kurniawan <[email protected]>
// Copyright 2001,
// First release : November 20, 2001
//
//////////////////////////////////////////////////////////////////////
// File : agsMSMQ.cpp:
// Version : 1.0
// Description : implementation of the agsMSMQ class.
//////////////////////////////////////////////////////////////////////
// Note : Don't forget to add library file ,mqrt.lib ,
// into your project
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "agsMSMQ.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//##ModelId=3C0DB2FF0351
agsMSMQ::agsMSMQ()
{
pSecurity = NULL;
dwIDprop = 0;
dwBufferLength = 256;
}
//##ModelId=3C0DB2FF0352
agsMSMQ::~agsMSMQ()
{
}
//##ModelId=3C0DB2FF0379
void agsMSMQ::InitialMQQueue()
{
QProps.cProp = dwIDprop;
QProps.aPropID = QPropID;
QProps.aPropVar = QPropVar;
QProps.aStatus = QStatus;
}
//##ModelId=3C0DB2FF0354
void agsMSMQ::InitialMQMSG()
{
QPropMsg.cProp = dwIDprop;
QPropMsg.aPropID = QMsg;
QPropMsg.aPropVar = QPropVar;
QPropMsg.aStatus = QStatus;
}
//##ModelId=3C0DB2FF0349
CString agsMSMQ::getErrorMsg()
{
return m_sError;
}
//##ModelId=3C0DB2FF0367
void agsMSMQ::InitialPropidQ()
{
QPropID[dwIDprop] = PROPID_Q_PATHNAME;
QPropVar[dwIDprop].vt = VT_LPWSTR;
QPropVar[dwIDprop].pwszVal = wszPath;
dwIDprop++;
QPropID[dwIDprop] = PROPID_Q_LABEL;
QPropVar[dwIDprop].vt = VT_LPWSTR;
QPropVar[dwIDprop].pwszVal = wszLabel;
dwIDprop++;
}
//##ModelId=3C0DB2FF035B
void agsMSMQ::InitialPropidBody(CString label,CString msg)
{
dwAccessMode = MQ_SEND_ACCESS;
dwShareMode = MQ_DENY_NONE;
strcpy((char*)pMessage,msg);
QMsg[dwIDprop] = PROPID_M_LABEL;
QPropVar[dwIDprop].vt = VT_LPWSTR;
QPropVar[dwIDprop].pwszVal =(LPWSTR) label.AllocSysString();
dwIDprop++;
QMsg[dwIDprop] = PROPID_M_BODY;
QPropVar[dwIDprop].vt = VT_VECTOR | VT_UI1;
QPropVar[dwIDprop].caub.pElems = pMessage;
QPropVar[dwIDprop].caub.cElems = strlen(msg);
dwIDprop++;
QMsg[dwIDprop] = PROPID_M_DELIVERY;
QPropVar[dwIDprop].vt = VT_UI1;
QPropVar[dwIDprop].bVal = MQMSG_DELIVERY_RECOVERABLE;
dwIDprop++;
}
//##ModelId=3C0DB2FF033E
BOOL agsMSMQ::CreatePublicQ(CString serv, CString pathmsg,CString label)
{
m_sPathQ.Format(_T("%s\\%s"),serv,pathmsg);
m_sLabelQ.Format(_T("%s"),label);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
::MultiByteToWideChar(CP_ACP,0,m_sLabelQ,-1,wszLabel,sizeof(wszLabel));
InitialPropidQ();
InitialMQQueue();
hr = MQCreateQueue(pSecurity,
&QProps,
wszBuffer,
&dwBufferLength);
if(FAILED(hr))
{
m_sError = "Error to create public queue";
return FALSE;
}
dwIDprop = 0;
return TRUE;
}
//##ModelId=3C0DB2FF0333
BOOL agsMSMQ::CreatePrivateQ(CString serv, CString pathmsg, CString label)
{
m_sPathQ.Format(_T("%s\\PRIVATE$\\%s"),serv,pathmsg);
m_sLabelQ.Format(_T("%s"),label);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
::MultiByteToWideChar(CP_ACP,0,m_sLabelQ,-1,wszLabel,sizeof(wszLabel));
InitialPropidQ();
InitialMQQueue();
hr = MQCreateQueue(pSecurity,
&QProps,
wszBuffer,
&dwBufferLength);
if(FAILED(hr))
{
m_sError = "Error to create private queue";
return FALSE;
}
dwIDprop = 0;
return TRUE;
}
//##ModelId=3C0DB2FF0321
BOOL agsMSMQ::DeletePublicQ(CString serv, CString pathmsg)
{
m_sPathQ.Format(_T("%s\\%s"),serv,pathmsg);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
dwDestFormatLength = 256;
::SysFreeString(wszDestFormat);
hr = MQPathNameToFormatName(wszPath,
wszDestFormat,
&dwDestFormatLength);
if(FAILED(hr))
{
m_sError = "Error to convert from path name into format name";
return FALSE;
}
hr = MQDeleteQueue(wszDestFormat);
if(FAILED(hr))
{
m_sError = "Error to delete public queue";
return FALSE;
}
return TRUE;
}
//##ModelId=3C0DB2FF0317
BOOL agsMSMQ::DeletePrivateQ(CString serv, CString pathmsg)
{
m_sPathQ.Format(_T("%s\\PRIVATE$\\%s"),serv,pathmsg);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
dwDestFormatLength = 256;
::SysFreeString(wszDestFormat);
hr = MQPathNameToFormatName(wszPath,
wszDestFormat,
&dwDestFormatLength);
if(FAILED(hr))
{
m_sError = "Error to convert from path name into format name";
return FALSE;
}
hr = MQDeleteQueue(wszDestFormat);
if(FAILED(hr))
{
m_sError = "Error to delete private queue";
return FALSE;
}
return TRUE;
}
//##ModelId=3C0DB2FF030B
BOOL agsMSMQ::SendPublicQ(CString serv, CString pathmsg,CString labelmsg,CString msg)
{
m_sPathQ.Format("%s\\%s",serv,pathmsg);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
InitialPropidBody(labelmsg,msg);
InitialMQMSG();
dwDestFormatLength = 256;
::SysFreeString(wszDestFormat);
hr = MQPathNameToFormatName(wszPath,
wszDestFormat,
&dwDestFormatLength);
if(FAILED(hr))
{
m_sError = "Error to convert from path name into format name";
return FALSE;
}
hr = MQOpenQueue(wszDestFormat,
dwAccessMode,
dwShareMode,
&hQue);
if(FAILED(hr))
{
m_sError = "Error to open queue";
return FALSE;
}
hr = MQSendMessage(hQue,
&QPropMsg,
NULL);
if(FAILED(hr))
{
m_sError = "Error to send public queue";
return FALSE;
}
hr = MQCloseQueue(hQue);
if(FAILED(hr))
{
m_sError = "Error to close queue";
return FALSE;
}
return TRUE;
}
//##ModelId=3C0DB2FF02F8
BOOL agsMSMQ::SendPrivateQ(CString serv, CString pathmsg, CString labelmsg, CString msg)
{
m_sPathQ.Format(_T("%s\\PRIVATE$\\%s"),serv,pathmsg);
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
InitialPropidBody(labelmsg,msg);
InitialMQMSG();
dwDestFormatLength = 256;
::SysFreeString(wszDestFormat);
hr = MQPathNameToFormatName(wszPath,
wszDestFormat,
&dwDestFormatLength);
if(FAILED(hr))
{
m_sError = "Error to convert from path name into format name";
return FALSE;
}
hr = MQOpenQueue(wszDestFormat,
dwAccessMode,
dwShareMode,
&hQue);
if(FAILED(hr))
{
m_sError = "Error to open queue";
return FALSE;
}
hr = MQSendMessage(hQue,
&QPropMsg,
NULL);
if(FAILED(hr))
{
m_sError = "Error to send private queue";
return FALSE;
}
hr = MQCloseQueue(hQue);
if(FAILED(hr))
{
m_sError = "Error to close queue";
return FALSE;
}
return TRUE;
}
//##ModelId=3C0DB2FF02ED
BOOL agsMSMQ::PrepapeGetMessage(CString srv, CString path,int modeMSMQ)
{
switch(modeMSMQ)
{
case 0: m_sPathQ.Format(_T("%s\\%s"),srv,path);
break;
case 1: m_sPathQ.Format(_T("%s\\PRIVATE$\\%s"),srv,path);
}
::MultiByteToWideChar(CP_ACP,0,m_sPathQ,-1,wszPath,sizeof(wszPath));
dwIDprop = 0;
dwDestFormatLength = 256;
QMsg[dwIDprop] = PROPID_M_LABEL;
QPropVar[dwIDprop].vt = VT_LPWSTR;
QPropVar[dwIDprop].pwszVal = wszBuffer;
dwIDprop++;
QMsg[dwIDprop] = PROPID_M_LABEL_LEN;
QPropVar[dwIDprop].vt = VT_UI4;
QPropVar[dwIDprop].ulVal= 25