📄 mounitelistenwnd.cpp
字号:
// moUniteListenWnd.cpp : implementation file
//
#include "stdafx.h"
#include "moUniteService.h"
#include "moUniteListenWnd.h"
//#include "../moservice/MOListenWnd.h"
UINT myConvert(UINT u){
UINT uReturn = 0;
byte b1 = (u&0xff000000)>>24;
byte b2 = (u&0x00ff0000)>>16;
byte b3 = (u&0x0000ff00)>>8;
byte b4 = u&0x000000ff;
uReturn |= b4<<24;
uReturn |= b3<<16;
uReturn |= b2<<8;
uReturn |= b1;
return uReturn;
}
static CADODatabase *mo_db=NULL;
// CmoUniteListenWnd
void SocketTraceMO(CString str){
#ifdef _DEBUG
str+= "\r\n";
CString strFilename = "c:\\UniteSocketmo.txt";
CFileStatus status;
CTime time = CTime::GetCurrentTime();
CString strTime;
strTime.Format("*******%04d-%02d-%02d %02d:%02d:%02d ****",
time.GetYear(),time.GetMonth(),time.GetDay(),
time.GetHour(),time.GetMinute(),time.GetSecond());
if(CFile::GetStatus(strFilename,status)){
CFile f(strFilename,CFile::modeReadWrite|CFile::modeNoTruncate);
f.SeekToEnd();
f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
else{
CFile f(strFilename,CFile::modeCreate|CFile::modeWrite);
f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
#endif
}
void UionLinkID(CString str){
#ifdef _DEBUG
str+= "\r\n";
CString strFilename = "c:\\UniteLinkIDMo.txt";
CFileStatus status;
CTime time = CTime::GetCurrentTime();
CString strTime;
strTime.Format("*******%04d-%02d-%02d %02d:%02d:%02d ****",
time.GetYear(),time.GetMonth(),time.GetDay(),
time.GetHour(),time.GetMinute(),time.GetSecond());
if(CFile::GetStatus(strFilename,status)){
CFile f(strFilename,CFile::modeReadWrite|CFile::modeNoTruncate);
f.SeekToEnd();
f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
else{
CFile f(strFilename,CFile::modeCreate|CFile::modeWrite);
f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
#endif
}
void MOMessageLog(CString str){
//#ifdef _DEBUG
//MOTrace("INPUT momessagelog");
CString strFilename;
CFileStatus status;
try
{
str+= "\r\n";
CString timelog;
CTime timeS = CTime::GetCurrentTime();
timelog.Format("联通%02d_%02dMO日志",
timeS.GetMonth(),timeS.GetDay());
timelog="d:\\"+timelog+".txt";
strFilename =timelog;// "c:\\YDMOService.txt";
}catch (...) {
SocketTraceMO("momessagelog ERROR");
}
CString strTime;
CTime time = CTime::GetCurrentTime();
strTime.Format("%04d-%02d-%02d %02d:%02d:%02d ",
time.GetYear(),time.GetMonth(),time.GetDay(),
time.GetHour(),time.GetMinute(),time.GetSecond());
if(CFile::GetStatus(strFilename,status)){
CFile f(strFilename,CFile::modeReadWrite|CFile::modeNoTruncate);
f.SeekToEnd();
//f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
else{
CFile f(strFilename,CFile::modeCreate|CFile::modeWrite);
//f.Write(strTime.GetBuffer(0),strTime.GetLength());
f.Write(str.GetBuffer(0),str.GetLength());
f.Close();
}
//#endif
}
IMPLEMENT_DYNAMIC(CmoUniteListenWnd, CWnd)
CmoUniteListenWnd::CmoUniteListenWnd()
{
m_pSocketMo=NULL;
}
CmoUniteListenWnd::~CmoUniteListenWnd()
{
Destory();
}
void CmoUniteListenWnd::Destory(){
if(m_pSocketMo){
m_pSocketMo->CloseAll();
m_pSocketMo->Close();
delete m_pSocketMo;
m_pSocketMo = NULL;
}
if(mo_db){
mo_db->Close();
delete mo_db;
mo_db=NULL;
}
}
BEGIN_MESSAGE_MAP(CmoUniteListenWnd, CWnd)
ON_MESSAGE(WM_SGIP_MO,OnSgipMO)
ON_MESSAGE(WM_SGIP_REPORT,OnSGIPREPORT)
END_MESSAGE_MAP()
// CMOListenWnd message handlers
BOOL CmoUniteListenWnd::Create(CWnd * pMoParent){
UionLinkID("input CmoUniteListenWnd Create");
LPCTSTR lpAddress=NULL;
CString strWndClass = ::AfxRegisterWndClass(0,NULL,NULL,NULL);
BOOL BOK=CWnd::CreateEx(0,strWndClass,"SMSUniteListener",0,CRect(0,0,0,0),pMoParent,0,NULL);
m_pSocketMo = new SocketMO(this);
if("127.0.0.1"!=MyReg::GetClientPath())lpAddress=MyReg::GetClientPath();
if(!m_pSocketMo->Create(MyReg::GetUnionMoPort())){
Destory();
return FALSE;
SocketTraceMO("Socket create failed!");
}
else
{
if(!m_pSocketMo->Listen()){
UionLinkID("!m_pSocketMo->Listen()");
Destory();
return FALSE;
SocketTraceMO("Socket listen failed!");
}
else
{ UionLinkID("OpenSQLServerDirect");
mo_db=new CADODatabase();
mo_db->OpenSQLServerDirect(MyReg::GetDBIP(),MyReg::GetDBUserID(),MyReg::GetDBPassword(),MyReg::GetDBName());
CString msgbox;
msgbox.Format("Socket created at Localhost and listening %d! ",MyReg::GetUnionMoPort());
UionLinkID(msgbox);
SocketTraceMO(msgbox);
}
}
return BOK;
}
//mo消息处理
HRESULT CmoUniteListenWnd::OnSgipMO(WPARAM wPar,LPARAM lPar)
{
UionLinkID("input CmoUniteListenWnd OnSgipMO");
SGIP_MO_MESSAGE *lpMoMsg=new SGIP_MO_MESSAGE();
lpMoMsg=(LPSGIP_MO_MESSAGE)lPar;
if(!lpMoMsg)return 0;
if(strlen(lpMoMsg->tcMobileFrom)<=0)return 0;
UionLinkID("消息映射到指定变量列表");
CString strPhoneCode(lpMoMsg->tcMobileFrom);
UionLinkID("strPhoneCode");
UionLinkID(strPhoneCode);
CString strMsgMo(lpMoMsg->pMessage);
UionLinkID("strMsgMo");
UionLinkID(strMsgMo);
CString strSPnumber(lpMoMsg->spNumber);
UionLinkID("strSPnumber");
UionLinkID(strSPnumber);
//CString LinkID(lpMoMsg->LinkID);//SGIP1.2中的作为Reserve 这8个字节分成两个4字节的INT构成。11-08
//UionLinkID("LinkID");
//UionLinkID(LinkID);
CStringArray strAr;
CString strCMD="";//命令
CString strMsgContent="";//取出命令后的消息
//拆出信息包,自定义一个方法,分割信息。
strMsgMo=strMsgMo.Mid(0,lpMoMsg->iMessageLength);
if(_splite(strMsgMo,strAr,"@@"))
{
if(strAr.GetCount()>0)strCMD=strAr[0].MakeUpper();
if(strAr.GetCount()>1){
for(int i=1;i<strAr.GetCount();i++){
if(strMsgContent!="")strMsgContent+=" ";
strMsgContent+=strAr[i];
}
}
}
else{
strCMD=strMsgMo;
strMsgContent="";
}
UionLinkID("strCMD");
UionLinkID(strCMD);
//对命令编程序
CString strTemp;
CString strContents;
CString strSpNumber(lpMoMsg->spNumber);
strContents=ReturnMsgs(strSPnumber,strCMD,"",strPhoneCode,strMsgContent); //,LinkID
MOMessageLog(strSPnumber+" "+strPhoneCode+" "+strCMD);
/*MOMessageLog();
MOMessageLog();*/
//MOMessageLog("//////////////////////////////////////////////");
return 0;
}
/////////////////////////////////////////
//MO信息处理过程
UINT priGetRnd(){
UINT temp;
srand((unsigned)time(NULL));
temp=UINT(rand());
return temp;
}
static CString ReturnMsgs(CString strSPNumber,CString strCommand,CString Enterprise_Code,CString strClientPhone,CString str_Msg){//,CString LinkID
UionLinkID("input ReturnMsgs");
try{
CADORecordset rs(mo_db);
CADORecordset rslog(mo_db);
CString strContent;
CTime time = CTime::GetCurrentTime();
CString strTZHM,strSql,strTZQS;
CStringArray arTZHM;
BOOL blBH=FALSE;
//在此处添加日志信息,表sms_log
if(!mo_db->IsOpen())mo_db->OpenSQLServerDirect(MyReg::GetDBIP(),MyReg::GetDBUserID(),MyReg::GetDBPassword(),MyReg::GetDBName());
//将MO信息添加到MO信息苦衷
UionLinkID("将MO信息添加到MO信息苦衷");
SocketTraceMO("DataInput sms_mo_input is begin");
rs.Open("SELECT * FROM SMS_MO_INPUT WHERE 1=0");
rs.AddNew();
rs.SetFieldValue("SPCode",strSPNumber);
rs.SetFieldValue("MobileCode",strClientPhone);
rs.SetFieldValue("SMS_Msg",strCommand);
//rs.SetFieldValue("LINKID",LinkID);////SGIP1.2中的作为Reserve 这8个字节分成两个4字节的INT构成。11-08
rs.Update();
rs.Close();
SocketTraceMO("DataInput SMS_MO_INPUT end");
UionLinkID("将MO信息添加到MO信息苦衷 结束");
//添加到日志表中
UionLinkID("添加到日志表中");
SocketTraceMO("DataInput SMS_LOG_NEW begin");
rslog.Open("SELECT * FROM SMS_LOG_NEW WHERE 1=0");
rslog.AddNew();
rslog.SetFieldValue("PhoneSrc",strClientPhone);
UionLinkID(strClientPhone);
rslog.SetFieldValue("PhoneDesc",strSPNumber);
UionLinkID(strSPNumber);
//rslog.SetFieldValue("LINKID",LinkID);
//UionLinkID(LinkID);
rslog.SetFieldValue("SmsMsg",strCommand);
UionLinkID(strCommand);
rslog.Update();
rslog.Close();
SocketTraceMO("DataInput SMS_LOG_NEW end");
UionLinkID("添加到日志表中 结束");
return strContent;
}
catch(...){
return "";
}
}
HRESULT CmoUniteListenWnd::OnSGIPREPORT(WPARAM wPar,LPARAM lPar)
{
try{
UionLinkID("状态报告 进入");
CADORecordset rslog(mo_db);
CString strSql="";
SGIP_REPORT_MSG *lpReport=new SGIP_REPORT_MSG();
lpReport=(LPSGIP_REPORT_MSG)lPar;
CString strMobile(lpReport->UserNumber);
byte bErrCode=0,bState=0;
UINT MSGID=0;
UINT KID=0;
UINT uTimeStamp=0;
bErrCode=lpReport->ErrorCode;
MSGID=lpReport->RndNumber;
KID=myConvert(MSGID);
uTimeStamp=lpReport->TimeStamp;
bState=lpReport->State;
//在此处添加日志信息,表sms_log
if(!mo_db->IsOpen())mo_db->OpenSQLServerDirect(MyReg::GetDBIP(),MyReg::GetDBUserID(),MyReg::GetDBPassword(),MyReg::GetDBName());
strSql.Format("insert into SMS_LOG_REPORT(mobile,statue,errcode,msgid,timestamp) values('%s','%d','%d','%d','%d')",strMobile,bState,bErrCode,MSGID,uTimeStamp);
rslog.Open(strSql);
rslog.Close();
SocketTraceMO(strSql);
CString strMsg;
strMsg.Format("timstamp:%d,mobile:%s,state:%d,errcode:%d,msgid:%d,%d",uTimeStamp,strMobile,bState,bErrCode,MSGID,KID);
SocketTraceMO(strMsg);
strSql.Format("update SMS_LOG_NEW SET ReportStatus='%d' Where Msg_ID='%d' and phoneDesc='%s' and pTimestamp='%d'",bErrCode,MSGID,strMobile,uTimeStamp);
rslog.Open(strSql);
rslog.Close();
SocketTraceMO(strSql);
}catch(...){
}
return 0;
}
static BOOL _splite(CString strSrc,CStringArray & arData,CString strFilter){
arData.RemoveAll();
while(!strSrc.IsEmpty()){
int iPos = strSrc.Find(strFilter);
if(iPos<0){
arData.Add(strSrc);
strSrc.Empty();
continue;
return false;
}
arData.Add(strSrc.Left(iPos));
strSrc = strSrc.Right(strSrc.GetLength()-iPos-strFilter.GetLength());
}
return true;
}
// CmoUniteListenWnd message handlers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -