📄 testdlg.cpp
字号:
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTestDlg::OnLogin()
{
CString szTmp;
int nTmp;
char pSendText[MAXBUFLEN];
SSB_SOCKET SSBSOCKET;
STRUCT_MSG_CONNECT* pConnect=new STRUCT_MSG_CONNECT;
UpdateData();
//校验
if(m_SimNo.IsEmpty() || (m_SimNo.GetLength()!=11))
{
AfxMessageBox("用户手机号输入有误!");
AfxGetApp()->m_pMainWnd->SetWindowText("短信情缘--陪聊模拟手机");
return;
}
nTmp=atoi(m_SimNo.Right(4));
//for (int n=1; n<=m_nAmount; n++,nTmp++)
for (int n=1; n<=1; n++,nTmp++)
{
pWSocket=NULL;
pWSocket=new CWSocket;
if (pWSocket->Connect(m_IP_ADDR,m_PORT)!=0)
{
AfxGetApp()->m_pMainWnd->SetWindowText("短信情缘--陪聊模拟手机");
AfxMessageBox("登录失败!");
return;
}
pConnect->sHeader.dwCommandId=DEV_CONNECT;
pConnect->sHeader.dwSeqNo=m_dwSequenceID++;
pConnect->sHeader.dwStatus=0;
pConnect->sHeader.dwTotalLen=sizeof(STRUCT_MSG_CONNECT);
szTmp.Format("123456%04d",nTmp);
strncpy(pConnect->nDeviceID,szTmp,16);
szTmp.Format("%s%04d",m_SimNo.Left(m_SimNo.GetLength()-4),nTmp);
strncpy(pConnect->szSimNumber,szTmp,21);
memcpy(pSendText,(char*)pConnect,pConnect->sHeader.dwTotalLen);
strncpy(SSBSOCKET.szSimNumber,szTmp,21);
SSBSOCKET.pWSocket=pWSocket;
SSBSOCKET.nAlarmInterval=m_nAlarmInterval;
SSBSOCKET.nAlarmTimes=m_nAlarmTimes;
SSBSOCKET.bRevc=true;
SSBSOCKET.pTestDlg=this;
//启动接收线程
if ((SOCKETPointer=SOCKETContainer.find(SSBSOCKET.szSimNumber))==SOCKETContainer.end())
{
SOCKETContainer.insert(SOCKET_MAP::value_type(SSBSOCKET.szSimNumber,SSBSOCKET));
SOCKETPointer--;
SOCKETPointer->second.pRevcThread=SSBSOCKET.pRevcThread=AfxBeginThread(RecvThread,&SOCKETPointer->second);
}
pWSocket->Send(pSendText,pConnect->sHeader.dwTotalLen);
}
//m_state.Format("%4d个用户登录成功",m_nAmount);
m_state = m_SimNo + "登录成功";
AfxGetApp()->m_pMainWnd->SetWindowText("短信情缘--陪聊模拟手机:当前用户--"+m_SimNo);
UpdateData(false);
delete pConnect;
pConnect=NULL;
for(int i=0 ; i<g_arrstrPhone.GetSize() ; i++)
if(g_arrstrPhone.GetAt(i) == m_SimNo) return;
g_arrstrPhone.Add(m_SimNo);
}
void CTestDlg::OnAlarm()
{
// TODO: Add your control notification handler code here
CString szTmp;
int nTmp;
CString szConnent;
UpdateData(true);
STRUCT_MSG_DELIVER* pDeliver=new STRUCT_MSG_DELIVER;
m_cs.Lock();
pDeliver->sHeader.dwCommandId=DEV_DELIVER;
pDeliver->sHeader.dwSeqNo=m_dwSequenceID++;
pDeliver->sHeader.dwStatus=0;
nTmp=atoi(m_SimNo.Right(4));
for (int n=1; n<=m_nAmount; n++,nTmp++)
{
szTmp.Format("%s%04d",m_SimNo.Left(m_SimNo.GetLength()-4),nTmp);
strncpy(pDeliver->szSimNumber,szTmp,21);
WriteConnent(pDeliver,"$A");
pDeliver->sHeader.dwTotalLen=sizeof(STRUCT_MSG_DELIVER)+
pDeliver->nMsgLen-MAXBUFLEN;
if ((SOCKETPointer=SOCKETContainer.find(pDeliver->szSimNumber))==SOCKETContainer.end())
continue;
memcpy(SOCKETPointer->second.pSendAlarm,(char*)pDeliver,pDeliver->sHeader.dwTotalLen);
SOCKETPointer->second.nAlarmLength=pDeliver->sHeader.dwTotalLen;
SOCKETPointer->second.bAlarm=true;
SOCKETPointer->second.pAlarmThread=AfxBeginThread(SendAlarmThread,&SOCKETPointer->second);
if (pDeliver->nMsgLen>0)
{
HexString(pDeliver->szMsgConnent,pDeliver->nMsgLen,szConnent);
// m_list_ctl.AddString("发送:"+szConnent);
// m_list_ctl.SetCurSel(m_list_ctl.GetCount()-1);
}
}
m_state.Format("%4d Alarm is Send",m_nAmount);
m_cs.Unlock();
UpdateData(false);
delete pDeliver;
pDeliver=NULL;
}
void CTestDlg::SubmitRsp(STRUCT_MSG_DELIVER* pSubmit)
{
CString szTmp,szConnent;
STRUCT_MSG_HEADER sHeader;
m_cs.Lock();
sHeader.dwCommandId=DEV_SUBMIT_RSP;
sHeader.dwSeqNo=pSubmit->sHeader.dwSeqNo;
sHeader.dwStatus=pSubmit->sHeader.dwStatus;
sHeader.dwTotalLen=sizeof(STRUCT_MSG_HEADER);
if ((SOCKETPointer=SOCKETContainer.find(pSubmit->szSimNumber))==SOCKETContainer.end())
{
szConnent.Format("%s未注册!",pSubmit->szSimNumber);
// m_list_ctl.AddString(szConnent);
// m_list_ctl.SetCurSel(m_list_ctl.GetCount()-1);
m_cs.Unlock();
return;
}
SOCKETPointer->second.pWSocket->Send((char*)&sHeader,sHeader.dwTotalLen);
if (pSubmit->nMsgLen>0)
{
// HexString(pSubmit->szMsgConnent,pSubmit->nMsgLen,szConnent);
WORD wLen = pSubmit->nMsgLen;
//===========================================================
//判断接收内容是Unicode or Ansi ,如果是Unicode转化至Ansi
//===========================================================
BOOL bUnicode = FALSE;
//unsigned char*p = (unsigned char*)pSubmit->szMsgConnent;
char*p = (char*)pSubmit->szMsgConnent;
for(int i=0 ; i<(int)wLen ; i++)
{
//if((*p)>128 || (*p)==0)
if((*p) <= 0)
{
bUnicode = TRUE;
break;
}
p++;
}
if(bUnicode)
UnicodeToANSY(pSubmit->szMsgConnent,wLen);
char str[256];
ZeroMemory(str,256);
_snprintf(str,256,"%s",pSubmit->szMsgConnent);
//记录接收日志
int count;
count=m_list_new.GetItemCount() ;
m_list_new.InsertItem(count,"");
m_list_new.SetItemText(count,0,"接收");
m_list_new.SetItemText(count,1,TimeToStr(CTime::GetCurrentTime()));
m_list_new.SetItemText(count,2,pSubmit->szDesNum);
m_list_new.SetItemText(count,3,pSubmit->szSimNumber);
m_list_new.SetItemText(count,4,str);
EnterCriticalSection(&g_CriticalWriteLog);
g_WriteLog(pSubmit->szMsgConnent , 2);
WriteStatusbar(0,pSubmit->szDesNum);
LeaveCriticalSection(&g_CriticalWriteLog);
str[wLen+6]=0;
// m_list_ctl.AddString(str);
// m_list_ctl.SetCurSel(m_list_ctl.GetCount()-1);
}
m_cs.Unlock();
}
void CTestDlg::OnClose()
{
if(AfxMessageBox("确认要关闭程序吗?" , MB_YESNO|MB_DEFBUTTON2) == IDNO)
return;
CStdioFile file;
if(file.Open("DestCode.dcl" , CFile::modeWrite|CFile::typeText|CFile::modeCreate))
{
int nCnt = m_ctrlDesNum.GetCount();
CString str;
for(int i=0 ; i<nCnt ; i++)
{
m_ctrlDesNum.GetLBText(i , str);
file.WriteString(str+"\r\n");
}
file.Close();
}
if (file.Open("user_log.txt",CFile::modeWrite|CFile::typeText|CFile::modeCreate))
{
CString str,str1;
char temp[200];
memset(temp,0,sizeof(temp));
str=m_wndStatusBar.GetPaneText(0)+" "+m_wndStatusBar.GetPaneText(1)+" "+m_wndStatusBar.GetPaneText(2)+" "+m_wndStatusBar.GetPaneText(3);
CTime time = CTime::GetCurrentTime();
sprintf(temp ,"%04d:%02d:%02d %s %s\r\n" ,
time.GetYear() ,
time.GetMonth() ,
time.GetDay() ,
"["+m_SimNo+"]用户统计:" ,
str);
str1=temp;
file.WriteString(str1+"\r\n");
}
file.Close();
::ExitProcess(0);
//m_cs.Lock();
//for (SOCKETPointer=SOCKETContainer.begin(); SOCKETPointer!=SOCKETContainer.end(); SOCKETPointer++)
//{
// SOCKETPointer->second.pWSocket->Close();
// delete SOCKETPointer->second.pWSocket;
// SOCKETPointer->second.pWSocket=NULL;
//}
m_cs.Unlock();
CDialog::OnClose();
}
UINT SendAlarmThread( LPVOID pParam )
{
SSB_SOCKET* pSSBSOCKET=(SSB_SOCKET*)pParam;
int nTimes=pSSBSOCKET->nAlarmTimes;
do
{
pSSBSOCKET->pWSocket->Send(pSSBSOCKET->pSendAlarm,pSSBSOCKET->nAlarmLength);
Sleep(pSSBSOCKET->nAlarmInterval*1000);
}while(pSSBSOCKET->bAlarm && nTimes-- > 0);
return 0;
}
UINT SendLocalThread( LPVOID pParam )
{
SSB_SOCKET* pSSBSOCKET=(SSB_SOCKET*)pParam;
do
{
pSSBSOCKET->pWSocket->Send(pSSBSOCKET->pSendLocal,pSSBSOCKET->nLocalLength);
Sleep(pSSBSOCKET->nLocalInterval*1000);
}while(pSSBSOCKET->bLocal);
return 0;
}
UINT RecvThread( LPVOID pParam )
{
SSB_SOCKET* pSSBSOCKET=(SSB_SOCKET*)pParam;
char pRecvText[MAXBUFLEN];
STRUCT_MSG_DELIVER* pSubmit=new STRUCT_MSG_DELIVER;
while(pSSBSOCKET->bRevc)
{
if(pSSBSOCKET->pWSocket->Receive(pRecvText,sizeof(STRUCT_MSG_HEADER))==1)
continue;
pSubmit=(STRUCT_MSG_DELIVER*)pRecvText;
switch(pSubmit->sHeader.dwCommandId)
{
case DEV_CONNECT_RSP:
break;
case DEV_DELIVER_RSP:
break;
case DEV_SUBMIT:
pSSBSOCKET->pTestDlg->SubmitRsp(pSubmit);
//AfxMessageBox("recv");
break;
default:
TRACE("Unknown command type\n");
break;
}
Sleep(50);
}
delete pSubmit;
pSubmit=NULL;
return 0;
}
int CTestDlg::ReadData()
{
CStdioFile file;
CString sFile("Local.txt");
CString msg,sRecord;
if(!(file.Open(sFile,CFile::modeRead | CFile::typeText)))
{
msg.Format("Failed to open %s",sFile);
//AfxMessageBox(msg);
return 1;
}
file.SeekToBegin();
while (file.ReadString(sRecord)!=NULL)
{
if (sRecord.Find("//")<0)
InsertInfo(sRecord);
}
file.Close();
return 0;
}
int CTestDlg::InsertInfo(CString sRecord)
{
SSBINFO_MAP::iterator SSBINFOPointer;
tSSBINFO SSBINFO;
int n,m;
CString sTmp;
SSBINFO.nMCC=460;
SSBINFO.nMNC=1;
SSBINFO.nTa=0;
sRecord.TrimLeft();
sRecord.TrimRight();
for (n=0; n<BTSBASE; n++)
{
if ((m=sRecord.Find(" "))<1)
break;
sTmp=sRecord.Left(m);
SSBINFO.RexINFO[n].tBss.lLocId=atol(sTmp);
sRecord=sRecord.Right(sRecord.GetLength()-m-1);
if ((m=sRecord.Find(" "))<1)
break;
sTmp=sRecord.Left(m);
SSBINFO.RexINFO[n].tBss.lCellId=atol(sTmp);
sRecord=sRecord.Right(sRecord.GetLength()-m-1);
if ((m=sRecord.Find(" "))<1)
break;
sTmp=sRecord.Left(m);
SSBINFO.RexINFO[n].tBss.lBsicId=atol(sTmp);
sRecord=sRecord.Right(sRecord.GetLength()-m-1);
if ((m=sRecord.Find(" "))<1)
{
sTmp=sRecord.Right(sRecord.GetLength()-m-1);
SSBINFO.RexINFO[n].nBtsRex=atoi(sTmp);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -