// InfoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "smsmanager.h"
#include "InfoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CInfoDlg dialog

#include "MainFrm.h"
#include "ProcessSocket.h"
#include "DLG_User_Find.h"

CInfoDlg::CInfoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CInfoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CInfoDlg)
	//}}AFX_DATA_INIT

	m_bInit    = false;
	m_bRefresh = false;
}


void CInfoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CInfoDlg)
	DDX_Control(pDX, IDC_INFO_S1, m_B_S1);
	DDX_Control(pDX, IDC_INFO_MSG, m_E_Msg);
	DDX_Control(pDX, IDC_INFO_LIST, m_wndList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CInfoDlg, CDialog)
	//{{AFX_MSG_MAP(CInfoDlg)
	ON_WM_SIZE()
	ON_NOTIFY(NM_RCLICK, IDC_INFO_LIST, OnRclickInfoList)
	//}}AFX_MSG_MAP
	ON_COMMAND( MENU_INFO_REFRESH    , On_User_Refresh )
	ON_COMMAND( MENU_INFO_SQLCONNECT , On_User_SqlConnect )
	ON_COMMAND( MENU_INFO_TD         , On_User_TD )
	ON_COMMAND( MENU_INFO_CLOSE   , On_User_Close )
	ON_COMMAND( MENU_INFO_FIND    , On_User_Find )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CInfoDlg message handlers

void CInfoDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	if ( m_bInit )
	{
		m_wndList.MoveWindow( 0 , 0 , cx,cy-220);
		m_B_S1.MoveWindow( 0 , cy-217 , cx , 17 );
		m_E_Msg.MoveWindow( 0 , cy-200 , cx , 200 );
	}
}

BOOL CInfoDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	//ȡ�ù��ò���
	//CMainFrame * pFrame = static_cast <CMainFrame *>((CMainFrame *)AfxGetMainWnd());
	this->GetParent()->GetParentFrame();
	m_pMainFrame = (CMainFrame *)this->GetParent()->GetParentFrame();
	m_pSocket    = &m_pMainFrame->m_Socket;

	//��ʼ��List
	m_Image.Create(16,16,ILC_COLOR16|ILC_MASK,5,5);
	m_Image.Add(AfxGetApp()->LoadIcon(IDI_L_INFO) );
	m_wndList.SubClassWindow2();
	m_wndList.SetHeadings(_T("���,50;    ��ҵ����,160;�û�����, 80; �� ��,60;��¼����,75;����ʱ��,75;IP��ַ,110; A,30;   B,70;     C,70;     D,70;"));
	m_wndList.SetGridLines(true);
	m_wndList.SetImageList(&m_Image,LVSIL_SMALL);


	m_bInit = true;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CInfoDlg::RefreshInfo()
{
#ifndef SMSMANAGER_KF
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_INFO_SEE,false) )
	{
		return false;
	}
#endif
/*
	if ( !m_pMainFrame->GetUserPurview(PURVIEW_MANAGER_SEE) )
	{
		return false;
	}
*/
	m_pMainFrame->SendFrame(SMSFUNC_GETINFO,NULL,0);
	return true;
}

BOOL CInfoDlg::ProcessSocket(Socket_Head *pHead)
{
	if (pHead->lFuncType == SMSFUNC_GETINFO)
	{
		m_bRefresh = true;  //�Ѿ�ˢ�¹�
		ANS_GetInfo * pInfo = (ANS_GetInfo *)pHead->pFrame;
		ANS_GetInfoData * pData = (ANS_GetInfoData *)(pHead->pFrame+sizeof(ANS_GetInfo));
		m_E_Msg.SetWindowText( pInfo->szMsg );
		m_wndList.ShowWindow(SW_HIDE); //�ӿ���ʾ�ٶ�
		m_wndList.DeleteAllItems();
		TCHAR Buf[256];
		for ( int i=0;i<pInfo->lCount-1;i++ )
		{
			_stprintf(Buf , _T("%d") , i+1 );
			m_wndList.InsertItem( i , Buf , 0 );
			m_wndList.SetItemText(i,1,pData->szCorpName);
			m_wndList.SetItemText(i,2,pData->szLoginName);
			_stprintf( Buf , _T("%6d") , pData->lVer );
			m_wndList.SetItemText(i,3,Buf);
			m_wndList.SetItemText(i,4,_itot(pData->lLoginCount,Buf,10));
			_stprintf( Buf , _T("%02d:%02d:%02d") , pData->tLoginTime.wHour,pData->tLoginTime.wMinute,pData->tLoginTime.wSecond);
			m_wndList.SetItemText(i,5,Buf);
			m_wndList.SetItemText(i,6,pData->szIP);
			m_wndList.SetItemText(i,7,_itot(pData->ucUserType,Buf,10));
			m_wndList.SetItemText(i,8,_itot(pData->lUserID,Buf,10));
			pData ++;
		}

		ANS_GetInfoData2 * pData2 = (ANS_GetInfoData2 *)pData;
		_stprintf( Buf , _T("��������:%d ����IO:%d , δ������IO:%d ����IO:%d  �����߳�:%d �����߳�:%d ������SQL:%d") , pData2->lCount,pData2->lUCount,pData2->lWLJCount,pData2->lKCount,pData2->lPUCount,pData2->lPKCount,pData2->lPLCount );
		m_B_S1.SetWindowText(Buf);
		m_wndList.ShowWindow(SW_SHOW); //�ӿ���ʾ�ٶ�
		return true;
	}
	if (pHead->lFuncType == SMSFUNC_CLOSECLIENT)
	{
		MessageBox( _T("ǿ���߳��ͻ��˳ɹ�����ҪV2.90���ϵIJ�֧�֣�") ,_T("��Ϣ"), MB_ICONINFORMATION );
		return true;
	}
	if (pHead->lFuncType == SMSFUNC_SQLCONNECT)
	{
		ANS_SqlConnect * pConnect = (ANS_SqlConnect *)pHead->pFrame;
		ANS_SqlConnectData * pData = (ANS_SqlConnectData *)(pHead->pFrame+sizeof(ANS_SqlConnect));
		m_wndList.ShowWindow(SW_HIDE); //�ӿ���ʾ�ٶ�
		m_wndList.DeleteAllItems();

		TCHAR Buf[256];
		for ( int i=0;i<pConnect->lCount;i++ )
		{
			_stprintf(Buf , _T("%d") , pData->lIndex );
			m_wndList.InsertItem( i , Buf , 0 );
			_stprintf(Buf , _T("%d") , pData->lUserID );
			m_wndList.SetItemText(i,1,Buf);
			_stprintf(Buf , _T("%d") , pData->lFuncID );
			m_wndList.SetItemText(i,2,Buf);
			_stprintf( Buf , _T("%d") , pData->bUse );
			m_wndList.SetItemText(i,3,Buf);
			_stprintf( Buf , _T("%d") , pData->dwUseTime );
			m_wndList.SetItemText(i,4,Buf);
			_stprintf( Buf , _T("%6d") , pData->dwEndUseTime );
			m_wndList.SetItemText(i,5,Buf);
			m_wndList.SetItemText(i,6,pData->szSQL1);
			m_wndList.SetItemText(i,7,pData->szSQL2);
			pData ++;
		}
		m_wndList.ShowWindow(SW_SHOW); //�ӿ���ʾ�ٶ�
		return true;
	}
	if (pHead->lFuncType == SMSFUNC_GETTD)
	{
		ANS_GetTD * pConnect = (ANS_GetTD *)pHead->pFrame;
		ANS_GetTDData * pData = (ANS_GetTDData *)(pHead->pFrame+sizeof(ANS_GetTD));
		m_wndList.ShowWindow(SW_HIDE); //�ӿ���ʾ�ٶ�
		m_wndList.DeleteAllItems();

		TCHAR Buf[256];
		for ( int i=0;i<pConnect->lCount;i++ )
		{
			_stprintf(Buf , _T("%d") , i+1 );
			m_wndList.InsertItem(i,Buf,0);
			if ( pData->bUse )
				m_wndList.SetItemText(i,1,_T("����"));
			else
				m_wndList.SetItemText(i,1,_T("����"));
			m_wndList.SetItemText(i,2,pData->szStatus);
			m_wndList.SetItemText(i,3,pData->szName);
			m_wndList.SetItemText(i,4,pData->szTDTime);
			m_wndList.SetItemText(i,5,pData->szSend);
			m_wndList.SetItemText(i,6,pData->szFail);
			m_wndList.SetItemText(i,7,pData->szPer);
			m_wndList.SetItemText(i,8,pData->szSpeed);
			m_wndList.SetItemText(i,9,pData->szRefreshTime);
			m_wndList.SetItemText(i,10,pData->szFileName);
			pData ++;
		}
		m_wndList.ShowWindow(SW_SHOW); //�ӿ���ʾ�ٶ�
		return true;
	}	
	return false;
}

BOOL CInfoDlg::ReShow(BOOL bRefresh)
{
	ShowWindow( SW_SHOW );
	if ( bRefresh || !m_bRefresh )
	{
		RefreshInfo();
	}
	return true;
}

BOOL CInfoDlg::ReHide()
{
	ShowWindow(SW_HIDE);
	return true;
}

void CInfoDlg::Close()
{


}

void CInfoDlg::ShowRMenu()
{
	if (!m_pMainFrame->GetUserPurview(PURVIEW_INFO_SEE,false))  //û�в鿴Ȩ��
		return ;

	CMenu menu;
	menu.CreatePopupMenu();

	long lItem = this->GetCurrentSelected();
	if ( lItem >= 0 )
		menu.AppendMenu(MF_STRING     , MENU_INFO_CLOSE, _T(" ǿ���߳� ") );
	else
		menu.AppendMenu(MF_STRING|MF_DISABLED|MF_GRAYED     , MENU_INFO_CLOSE, _T(" ǿ���߳� ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_INFO_SQLCONNECT, _T(" ˢ���������� ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_INFO_TD        , _T(" ˢ��ͨ������ ") );
	menu.AppendMenu(MF_SEPARATOR );
	menu.AppendMenu(MF_STRING     , MENU_INFO_FIND, _T(" ����... ") );
	menu.AppendMenu(MF_SEPARATOR );
	//ˢ��
	menu.AppendMenu(MF_STRING     , MENU_INFO_REFRESH, _T(" ˢ�µ�¼���� ") );

	//��ʾ�˵�
	POINT pt ;
	::GetCursorPos( &pt );
	//this->ClientToScreen( &pt);
	menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_RIGHTBUTTON,pt.x,pt.y, this, NULL);
	menu.DestroyMenu();
}
void CInfoDlg::On_User_Refresh()
{
	RefreshInfo();
}
void CInfoDlg::On_User_Find()
{
	DLG_User_Find dlg(this);
	if ( dlg.DoModal() == IDOK )
	{
		BOOL bFirst = true;
		m_wndList.UnSelectAllItems();
		long lCount = m_wndList.GetItemCount();
		for ( int i=0 ; i<lCount ;i++ )
		{
			CString str = m_wndList.GetItemText(i,1);
			CString str2= m_wndList.GetItemText(i,2);
			if ( str.Find(dlg.m_strName)>=0 ||
				 str2.Find(dlg.m_strName)>=0)
			{
				m_wndList.SelectItem(i);
				if ( bFirst )
				{
					m_wndList.EnsureVisible(i,true);
					bFirst = false;
				}
			}
		}
	}
}
void CInfoDlg::On_User_SqlConnect()
{
	REQ_SqlConnect * pConnect = new REQ_SqlConnect;
	memset(pConnect,0,sizeof(REQ_SqlConnect));
	m_pMainFrame->SendFrame(SMSFUNC_SQLCONNECT,(BYTE*)pConnect,sizeof(REQ_SqlConnect));	
}
void CInfoDlg::On_User_TD()
{
	REQ_GetTD * pGetTD = new REQ_GetTD;
	memset(pGetTD,0,sizeof(REQ_GetTD));
	m_pMainFrame->SendFrame(SMSFUNC_GETTD,(BYTE*)pGetTD,sizeof(REQ_GetTD));	
}
void CInfoDlg::On_User_Close()
{

	long lItem = this->GetCurrentSelected();
	if ( lItem < 0 )
		return ;

	if ( !m_pMainFrame->GetUserPurview(PURVIEW_INFO_SEE) )
	{
		return ;
	}

	REQ_CloseClient * pClose = new REQ_CloseClient;
	memset(pClose,0,sizeof(REQ_CloseClient));
	CString strTemp;
	strTemp = m_wndList.GetItemText(lItem,7);
	pClose->ucUserType = _ttol(strTemp);
	strTemp = m_wndList.GetItemText(lItem,8);
	pClose->lUserID    = _ttol(strTemp);

	m_pMainFrame->SendFrame(SMSFUNC_CLOSECLIENT,(BYTE*)pClose,sizeof(REQ_CloseClient));	
}

void CInfoDlg::OnRclickInfoList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	ShowRMenu();
	
	*pResult = 0;
}

long CInfoDlg::GetCurrentSelected()
{
	POSITION pos = m_wndList.GetFirstSelectedItemPosition();
	if ( pos )
	{
		return m_wndList.GetNextSelectedItem(pos);
	}
	return -1;
}