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

📄 testdlg.cpp

📁 模拟手机源程序,做短信系统(源码)
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	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 + -