📄 appserverdlg.cpp
字号:
}
}
return -1;
}
//在列表框中删除指定座席行
BOOL CAppServerDlg::DeleteSeatItem(INT nSeatID)
{
INT i = FindSeatItem(nSeatID);
if (i >= 0)
{
return (m_lstSeat.DeleteItem(i));
}
return FALSE;
}
//在列表框中更新指定座席行
BOOL CAppServerDlg::UpdateSeatItem(SEATSTATE *pSeatState)
{
if (pSeatState == NULL)
{
return FALSE;
}
INT i = FindSeatItem(pSeatState->nSeatID);
if (i == -1)
{
i = m_lstSeat.GetItemCount();
m_lstSeat.InsertItem(i, _T(""));
}
switch (pSeatState->nState)
{
case SEAT_DISABLE:
m_lstSeat.DeleteItem(i);
return TRUE;
case SEAT_IDLE:
m_lstSeat.SetItemText(i, 1, _T("空闲"));
break;
case SEAT_RING:
m_lstSeat.SetItemText(i, 1, _T("呼入"));
break;
case SEAT_CONNECT:
m_lstSeat.SetItemText(i, 1, _T("通话"));
break;
case SEAT_DIAL:
m_lstSeat.SetItemText(i, 1, _T("呼出"));
break;
case SEAT_OFFHOOK:
m_lstSeat.SetItemText(i, 1, _T("摘机"));
break;
default:
return FALSE;
}
CString str;
str.Format(_T("%d"), pSeatState->nSeatID);
m_lstSeat.SetItemText(i, 0, (LPCTSTR)str);
m_lstSeat.SetItemText(i, 2, (LPCTSTR)(pSeatState->sOperatorID));
m_lstSeat.SetItemText(i, 3, (LPCTSTR)(pSeatState->sCallerID));
m_lstSeat.SetItemText(i, 4, (LPCTSTR)(pSeatState->sCalledID));
m_lstSeat.SetItemData(i, (DWORD)(pSeatState->nSeatID));
return TRUE;
}
//向所有座席发送座席注销消息
void CAppServerDlg::LogoffAllSeat()
{
CHAR sBuffer[8];
HXDMESSAGE *pHXDMessage = (HXDMESSAGE *)sBuffer;
SEATSTATE *pSeatState;
pHXDMessage->m_nHeader = HXD_MESSAGE_HEADER;
pHXDMessage->m_nMessageId = D_MSG_LOGOFF;
pHXDMessage->m_nLength = 0;
for (INT i = 0; i < MAX_SEAT_SUPPORTED; i ++)
{
if (m_pSeatSocket[i] && m_pSeatSocket[i]->GetConnectState() == TRUE)
{
pSeatState = GetSeat(i);
if (pSeatState && pSeatState->nState != SEAT_DISABLE)
{
pSeatState->nState = SEAT_DISABLE;
UpdateSeatItem(pSeatState);
pHXDMessage->m_nChannel = pSeatState->nSeatID;
SendToSeat(pHXDMessage, i);
}
}
}
}
//注销指定座席
void CAppServerDlg::LogoffSeat(SEATSTATE *pSeatState)
{
CHAR sBuffer[8];
HXDMESSAGE *pHXDMessage = (HXDMESSAGE *)sBuffer;
pHXDMessage->m_nHeader = HXD_MESSAGE_HEADER;
pHXDMessage->m_nMessageId = D_MSG_LOGOFF;
pHXDMessage->m_nLength = 0;
pHXDMessage->m_nChannel = pSeatState->nSeatID;
pSeatState->nState = SEAT_DISABLE;
UpdateSeatItem(pSeatState);
if (pSeatState->nSocketID >= 0)
{
SendToSeat(pHXDMessage, pSeatState->nSocketID);
}
pSeatState->nSeatID = 0;
}
//向HXD服务器发送复位座席消息
void CAppServerDlg::ResetSeat(INT nSeatID)
{
CHAR sBuffer[8];
HXDMESSAGE *pHXDMessage = (HXDMESSAGE *)sBuffer;
pHXDMessage->m_nHeader = HXD_MESSAGE_HEADER;
pHXDMessage->m_nChannel = nSeatID;
pHXDMessage->m_nMessageId = U_MSG_CHRESET;
pHXDMessage->m_nLength = 0;
SendToHXDServer(pHXDMessage);
}
//
//发送测试呼
//参数:sCallerId —— 主叫号码;sCalledId —— 被叫号码;nChannel —— 通道号
void CAppServerDlg::SendCallOut(LPCTSTR sCallerId, LPCTSTR sCalledId, INT nChannel)
{
CHAR sBuffer[78];
::ZeroMemory(sBuffer, 78);
HXDMESSAGE *pHXDMessage = (HXDMESSAGE *)sBuffer;
pHXDMessage->m_nHeader = HXD_MESSAGE_HEADER;
pHXDMessage->m_nChannel = nChannel;
pHXDMessage->m_nMessageId = U_MSG_AUTODIAL;
pHXDMessage->m_nLength = 70;
lstrcpy(pHXDMessage->m_pMessage, sCallerId);
lstrcpy(&(pHXDMessage->m_pMessage[20]), sCalledId);
lstrcpy(&(pHXDMessage->m_pMessage[40]), sCalledId);
*((SHORT *)(&(pHXDMessage->m_pMessage[62]))) = 2;
*((SHORT *)(&(pHXDMessage->m_pMessage[64]))) = 60;
*((SHORT *)(&(pHXDMessage->m_pMessage[66]))) = 1;
*((SHORT *)(&(pHXDMessage->m_pMessage[68]))) = 0x14;
if (SendToHXDServer(pHXDMessage) == TRUE)
{
m_nTestCallSent ++;
}
}
void CAppServerDlg::OnRecvseatCheck()
{
// TODO: Add your control notification handler code here
char chPath[160];
::GetCurrentDirectory(160, chPath);
strcat(chPath, _T("\\recvseat.log"));
if (m_bRecvFromSeat)
{
m_RecvSeatFile.Close();
m_bRecvFromSeat = FALSE;
}
else
{
m_RecvSeatFile.Open(chPath, CFile::modeCreate | CFile::modeReadWrite | CFile::typeText);
m_RecvSeatFile.WriteString(_T("包头"));
m_RecvSeatFile.WriteString(_T(" "));
m_RecvSeatFile.WriteString(_T("包类型"));
m_RecvSeatFile.WriteString(_T(" "));
m_RecvSeatFile.WriteString(_T("通道号"));
m_RecvSeatFile.WriteString(_T(" "));
m_RecvSeatFile.WriteString(_T("包长"));
m_RecvSeatFile.WriteString(_T("\n"));
m_bRecvFromSeat = TRUE;
}
UpdateData(TRUE);
}
void CAppServerDlg::OnSendseatCheck()
{
// TODO: Add your control notification handler code here
char chPath[160];
::GetCurrentDirectory(160, chPath);
strcat(chPath, _T("\\sendseat.log"));
if (m_bSendToSeat)
{
m_SendSeatFile.Close();
m_bSendToSeat = FALSE;
}
else
{
m_SendSeatFile.Open(chPath, CFile::modeCreate | CFile::modeReadWrite | CFile::typeText);
m_bSendToSeat = TRUE;
}
UpdateData(TRUE);
}
void CAppServerDlg::OnRecvhxdCheck()
{
// TODO: Add your control notification handler code here
char chPath[160];
CTime NowTime;
NowTime = CTime::GetCurrentTime();
::GetCurrentDirectory(160, chPath);
strcat(chPath, _T("\\") );
strcat(chPath, NowTime.Format("%H_%M_%s_"));
strcat(chPath, _T("recvhxd.log"));
if (m_bRecvFromHXD)
{
m_RecvHXDFile.Close();
m_bRecvFromHXD = FALSE;
}
else
{
m_RecvHXDFile.Open(chPath, CFile::modeCreate | CFile::modeReadWrite | CFile::typeText);
m_bRecvFromHXD = TRUE;
}
UpdateData(TRUE);
}
void CAppServerDlg::OnSendhxdCheck()
{
// TODO: Add your control notification handler code here
char chPath[160];
::GetCurrentDirectory(160, chPath);
strcat(chPath, _T("\\sendhxd.log"));
if (m_bSendToHXD)
{
m_SendHXDFile.Close();
m_bSendToHXD = FALSE;
}
else
{
m_SendHXDFile.Open(chPath, CFile::modeCreate | CFile::modeReadWrite | CFile::typeText);
m_bSendToHXD = TRUE;
}
UpdateData(TRUE);
}
void CAppServerDlg::SetCallOut(BOOL bCallOut)
{
m_bCallOut = bCallOut;
}
void CAppServerDlg::OnAutoCallout()
{
// TODO: Add your control notification handler code here
if (GetCallOutState() == FALSE)
{
SetCallOut(TRUE);
((CButton *)GetDlgItem(IDC_AUTO_CALLOUT))->SetWindowText(_T("停止自动呼出"));
}
else
{
SetCallOut(FALSE);
((CButton *)GetDlgItem(IDC_AUTO_CALLOUT))->SetWindowText(_T("启动自动呼出"));
}
}
BOOL CAppServerDlg::GetCallOutState()
{
return m_bCallOut;
}
void CAppServerDlg::OnHandCallout()
{
// TODO: Add your control notification handler code here
if (m_nWaitConnect == -1)
{
SendCallOut((LPCTSTR)m_sCallerId, (LPCTSTR)m_sCalledId, -1);
}
}
void CAppServerDlg::LogInAllChannel()
{
USHORT i, j;
HXDMESSAGE hxdMessage;
SEATSTATE *pSeatState;
if ( m_bAutoAnswer )
{
for ( j = 0; j < m_sAutoNum; j ++ )
{
for ( i = m_AutoArray[j].m_sStartAgentChannel; i <= m_AutoArray[j].m_sEndAgentChannel; i ++ )
{
hxdMessage.m_nHeader = HXD_MESSAGE_HEADER;
hxdMessage.m_nMessageId = U_MSG_LOGON;
hxdMessage.m_nLength = 22;
hxdMessage.m_nChannel = i;
SHORT *pOpType = (SHORT *)hxdMessage.m_pMessage;
*pOpType ++ = m_AutoArray[j].m_sLoginID[0];
*pOpType ++ = m_AutoArray[j].m_sLoginID[1];
*pOpType ++ = m_AutoArray[j].m_sLoginID[2];
*pOpType ++ = m_AutoArray[j].m_sLoginID[3];
*pOpType ++ = m_AutoArray[j].m_sLoginID[4];
*pOpType ++ = m_AutoArray[j].m_sLoginID[5];
hxdMessage.m_pMessage[12] = 0;
SendToHXDServer(&hxdMessage);
pSeatState = AddSeat(j);
if (pSeatState == NULL)
{
return ;
}
pSeatState->nSeatID = hxdMessage.m_nChannel;
pSeatState->sOperatorID = (LPCTSTR)(&(hxdMessage.m_pMessage[12]));
DeleteSeatItem(pSeatState->nSeatID);
// lstrcpyn(&hxdMessage.m_pMessage[12], (LPCTSTR)m_sOperatorID, 10);
}
}
}
}
UINT HXDMessageThread( LPVOID pParam )
{
CAppServerDlg * pDlg;
pDlg = (CAppServerDlg *)pParam;
Sleep( 2000 );
while( 1 )
{
pDlg->m_csReceQueue.Lock();
pDlg->AnalysisHXDServerMessage();
pDlg->m_csReceQueue.Unlock();
Sleep( 100 );
}
}
void CAppServerDlg::AnalysisMessage()
{
while ( AnalysisHXDServerMessage() == TRUE )
{
m_nServerReceive ++;
m_sServerReceive.Format(_T("%d"), m_nServerReceive);
UpdateData(FALSE);
}
}
void CAppServerDlg::OnReceiveReq(CFunSocket *pSocket)
{
int iCount=0;
int iLen=0;
int iReqID = pSocket->m_iID;
iCount = pSocket->Receive( m_HxdRfcBuf[iReqID], MAX_RFCBUFSIZE, 0);
if(iCount == SOCKET_ERROR)
{
int a=pSocket->GetLastError();
goto PROCERROR;
}
if( show_data(iCount, (HXDRFCHD *)m_HxdRfcBuf[iReqID]) ) //分析处理调函请求数据包
{
//将处理结果发送到IpswSrvr
iCount = pSocket->Send(m_HxdRfcBuf[iReqID], ((HXDRFCHD *)m_HxdRfcBuf[iReqID])->lTotalSize, 0);
if( iCount == SOCKET_ERROR )
{
CString str,str1;
str1=this->GetFormatTime();
str.Format(_T("%s OnReceiveReq---Send错误! 错误代码:%d"), str1,WSAGetLastError() );
////m_ListLog.InsertString(0, str); //在LISTBOX中显示信息
this->AddListMessage(3,str);
goto PROCERROR;
}
}
else
{
goto PROCERROR;
}
return ;
PROCERROR:
OnCloseReqSocket(iReqID);
return ;
}
void CAppServerDlg::OnCloseReqSocket(int iID)
{
if(m_pFunSocket[iID] == NULL)
return;
m_pFunSocket[iID]->Close();
delete m_HxdRfcBuf[iID];
m_HxdRfcBuf[iID] = NULL;
delete m_pFunSocket[iID];
m_pFunSocket[iID] = NULL;
return;
}
BOOL CAppServerDlg::OnAcceptReq(CListenFunSocket *pSocket)
{
for (INT i = 0; i < MAX_FUNREQ_SUPPORTED; i ++)
{
if (m_pFunSocket[i] == NULL)
{
break;
}
}
if(i == MAX_FUNREQ_SUPPORTED)
return FALSE;
m_pFunSocket[i] = new CFunSocket( this,i );
if( m_pFunSocket[i] == NULL )
{
//内存不足
return FALSE;
}
if( pSocket->Accept(*m_pFunSocket[i]) == FALSE )
{
delete m_pFunSocket[i];
m_pFunSocket[i] = NULL;
int nError = pSocket->GetLastError();
CString str;
str.Format(_T("Accept(FunSocket)错误! 错误代码:%d"), nError);
/////m_ListLog.InsertString(0,str);
return FALSE;
}
if (m_HxdRfcBuf[i] == NULL)
{
m_HxdRfcBuf[i] = new CHAR[2048];
if (m_HxdRfcBuf[i] == NULL)
{
/////m_ListLog.InsertString(0,"分配内存出错!");
delete m_pFunSocket[i];
m_pFunSocket[i] = NULL;
return FALSE;
}
}
m_pFunSocket[i]->AsyncSelect(FD_READ | FD_CLOSE);
return TRUE;
}
BOOL CAppServerDlg::show_data(int nLen, HXDRFCHD *pData)
{
int iListMark=3;
if( pData->hxdID != RFC_HXDID )
return FALSE;
if( pData->sStateRet == RFC_DATA )//正常函数据的调
{
CHAR buf[2048];
if( nLen != int(pData->lTotalSize) )
return FALSE;
PPARAM pParamList;
if( strcmp(pData->szFName, "CreatFileName") == 0 ) //比较是否调用的是CreateFileName函数
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -