// DlgCfgRtpCast.cpp : implementation file
//

#include "stdafx.h"
#include "NetSdkDemo.h"
#include "DlgCfgRtpCast.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgRtpCast dialog


CDlgCfgRtpCast::CDlgCfgRtpCast(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCfgRtpCast::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgCfgRtpCast)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDlgCfgRtpCast::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgCfgRtpCast)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgCfgRtpCast, CDialog)
	//{{AFX_MSG_MAP(CDlgCfgRtpCast)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHK_EN1, OnChkEn1)
	ON_BN_CLICKED(IDC_CHK_EN2, OnChkEn2)
	ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
	ON_CBN_SELCHANGE(IDC_CMB_TYPE1, OnSelchangeCmbType1)
	ON_CBN_SELCHANGE(IDC_CMB_TYPE2, OnSelchangeCmbType2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgRtpCast message handlers

BOOL CDlgCfgRtpCast::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgCfgRtpCast::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
}

BOOL CDlgCfgRtpCast::GetEnvParam()
{
	int iRet;
	CString szText;
	//if(m_bGetParam)
	//	return TRUE;
	iRet = librmconfc_env_get(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
		MRCONFC_ENVCMD_RTPMULTICAST, sizeof(MRCONFC_RTPMULTICAST_T), &m_stRtpcast);
	if(iRet)
	{
		AfxMessageBox("获得参数失败!");
		return FALSE;
	}

	((CButton*)GetDlgItem(IDC_CHK_EN1))->SetCheck(m_stRtpcast.stMaster.bEnable);
	((CButton*)GetDlgItem(IDC_CHK_EN2))->SetCheck(m_stRtpcast.stSlave.bEnable);

	((CComboBox*)GetDlgItem(IDC_CMB_TYPE1))->SetCurSel(m_stRtpcast.stMaster.nProtolType);
	((CComboBox*)GetDlgItem(IDC_CMB_TYPE2))->SetCurSel(m_stRtpcast.stSlave.nProtolType);
	

	SetDlgItemText(IDC_EDT_MULTI_IP1, m_stRtpcast.stMaster.szMultiCastUrl);
	SetDlgItemText(IDC_EDT_MULTI_IP2, m_stRtpcast.stSlave.szMultiCastUrl);

	SetDlgItemInt(IDC_EDT_MULTI_PORT1, m_stRtpcast.stMaster.wMultiCastPort);
	SetDlgItemInt(IDC_EDT_MULTI_PORT2, m_stRtpcast.stSlave.wMultiCastPort);

	if(m_stRtpcast.stMaster.nProtolType == 0) // RTP
		szText.Format("rtp://%s:%d", m_stRtpcast.stMaster.szMultiCastUrl, m_stRtpcast.stMaster.wMultiCastPort);
	else
		szText.Format("udp://@%s:%d", m_stRtpcast.stMaster.szMultiCastUrl, m_stRtpcast.stMaster.wMultiCastPort);
	SetDlgItemText(IDC_EDT_NAME1, szText);

	if(m_stRtpcast.stSlave.nProtolType == 0) // RTP
		szText.Format("rtp://%s:%d", m_stRtpcast.stSlave.szMultiCastUrl, m_stRtpcast.stSlave.wMultiCastPort);
	else
		szText.Format("udp://@%s:%d", m_stRtpcast.stSlave.szMultiCastUrl, m_stRtpcast.stSlave.wMultiCastPort);
	SetDlgItemText(IDC_EDT_NAME2, szText);

	m_bGetParam = TRUE;

	OnChkEn1();
	OnChkEn2();

	OnSelchangeCmbType1();
	OnSelchangeCmbType2();
	return TRUE;
}

void CDlgCfgRtpCast::OnChkEn1() 
{
	BOOL bEnable = ((CButton*)GetDlgItem(IDC_CHK_EN1))->GetCheck();
	GetDlgItem(IDC_CMB_TYPE1)->EnableWindow(bEnable);
	GetDlgItem(IDC_EDT_MULTI_IP1)->EnableWindow(bEnable);
	GetDlgItem(IDC_EDT_MULTI_PORT1)->EnableWindow(bEnable);
}

void CDlgCfgRtpCast::OnChkEn2() 
{
	BOOL bEnable = ((CButton*)GetDlgItem(IDC_CHK_EN2))->GetCheck();
	GetDlgItem(IDC_CMB_TYPE2)->EnableWindow(bEnable);
	GetDlgItem(IDC_EDT_MULTI_IP2)->EnableWindow(bEnable);
	GetDlgItem(IDC_EDT_MULTI_PORT2)->EnableWindow(bEnable);
}

void CDlgCfgRtpCast::OnBtnSave() 
{
	int iRet;
	if(!m_bGetParam)
		return;
	m_stRtpcast.stMaster.bEnable = ((CButton*)GetDlgItem(IDC_CHK_EN1))->GetCheck();
	m_stRtpcast.stSlave.bEnable  = ((CButton*)GetDlgItem(IDC_CHK_EN2))->GetCheck();

	m_stRtpcast.stMaster.nProtolType = ((CComboBox*)GetDlgItem(IDC_CMB_TYPE1))->GetCurSel();
	m_stRtpcast.stSlave.nProtolType = ((CComboBox*)GetDlgItem(IDC_CMB_TYPE2))->GetCurSel();

	GetDlgItemText(IDC_EDT_MULTI_IP1, m_stRtpcast.stMaster.szMultiCastUrl, sizeof(m_stRtpcast.stMaster.szMultiCastUrl));
	GetDlgItemText(IDC_EDT_MULTI_IP2, m_stRtpcast.stSlave.szMultiCastUrl, sizeof(m_stRtpcast.stSlave.szMultiCastUrl));

	m_stRtpcast.stMaster.wMultiCastPort = GetDlgItemInt(IDC_EDT_MULTI_PORT1);
	m_stRtpcast.stSlave.wMultiCastPort = GetDlgItemInt(IDC_EDT_MULTI_PORT2);

	iRet = librmconfc_env_set(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
		MRCONFC_ENVCMD_RTPMULTICAST, sizeof(MRCONFC_RTPMULTICAST_T), &m_stRtpcast);
	if(iRet)
	{
		AfxMessageBox("保存参数失败!");
		return;
	}
}

void CDlgCfgRtpCast::OnSelchangeCmbType1() 
{
	CString szText;
	char szMultiCastUrl[MR_SLEN_IPADDR];
	WORD wMultiCastPort;

	int nType = ((CComboBox*)GetDlgItem(IDC_CMB_TYPE1))->GetCurSel();

	GetDlgItemText(IDC_EDT_MULTI_IP1, szMultiCastUrl, sizeof(szMultiCastUrl));
	wMultiCastPort = GetDlgItemInt(IDC_EDT_MULTI_PORT1);

	if(nType == 0) // RTP
		szText.Format("rtp://%s:%d", szMultiCastUrl, wMultiCastPort);
	else
		szText.Format("udp://@%s:%d", szMultiCastUrl, wMultiCastPort);
	SetDlgItemText(IDC_EDT_NAME1, szText);
}

void CDlgCfgRtpCast::OnSelchangeCmbType2() 
{
	CString szText;
	char szMultiCastUrl[MR_SLEN_IPADDR];
	WORD wMultiCastPort;
	
	int nType = ((CComboBox*)GetDlgItem(IDC_CMB_TYPE2))->GetCurSel();
	
	GetDlgItemText(IDC_EDT_MULTI_IP2, szMultiCastUrl, sizeof(szMultiCastUrl));
	wMultiCastPort = GetDlgItemInt(IDC_EDT_MULTI_PORT2);
	
	if(nType == 0) // RTP
		szText.Format("rtp://%s:%d", szMultiCastUrl, wMultiCastPort);
	else
		szText.Format("udp://@%s:%d", szMultiCastUrl, wMultiCastPort);
	SetDlgItemText(IDC_EDT_NAME2, szText);
}
