Ver código fonte

完成登录登出功能;

scbc.sat2 5 anos atrás
pai
commit
5113ca955c

+ 14 - 4
SATHelper/SATHelper/DlgLogin.cpp

@@ -46,6 +46,9 @@ BOOL CDlgLogin::OnInitDialog()
 	SetDlgItemText(IDC_EDIT_USERNAME, "superAdmin");
 	SetDlgItemText(IDC_EDIT_PASSWORD, "123456");
 #endif
+
+	SetDlgItemText(IDOK, SATData::login_resp.bStatus ? _T("登出") : _T("登录"));
+
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 异常: OCX 属性页应返回 FALSE
 }
@@ -58,10 +61,17 @@ void CDlgLogin::OnBnClickedOk()
 	GetDlgItemText(IDC_EDIT_USERNAME, strUserName);
 	GetDlgItemText(IDC_EDIT_PASSWORD, strPassword);
 
-	if ( CSATClient::GetInstance()->TCPLogin(strUserName.GetString(), strPassword.GetString()) )
-	{
-		if (!SATData::login_resp.bStatus)
-			AfxMessageBox("登录失败");
+	if (!SATData::login_resp.bStatus) {
+		if (CSATClient::GetInstance()->TCPLogin(strUserName.GetString(), strPassword.GetString())) {
+			if (!SATData::login_resp.bStatus)
+				AfxMessageBox("登录失败");
+		}
+	} 
+	else {
+		if (CSATClient::GetInstance()->TCPLogout(strUserName.GetString(), strPassword.GetString())) {
+			if (!SATData::logout_resp.bStatus)
+				AfxMessageBox("登出失败");
+		}
 	}
 
 	CDialogEx::OnOK();

+ 4 - 2
SATHelper/SATHelper/IRControlWnd.cpp

@@ -68,7 +68,8 @@ CIRControlWnd::~CIRControlWnd()
 	for (std::vector<BtnInfo>::iterator it = m_vtBtnInfo.begin(); it != m_vtBtnInfo.end(); it++)
 	{
 		if (it->pBTN)
-			it->pBTN->DestroyWindow();
+			//it->pBTN->DestroyWindow();
+			delete it->pBTN;
 		it->pBTN = NULL;
 	}
 
@@ -200,7 +201,8 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	StartIRDevice(FALSE);
 
 	std::thread t([](CIRControlWnd *pWnd) {
-		while (true)
+		//while (true)
+		while( IsWindow(pWnd->m_hWnd) )
 		{
 			if (g_pMainFrame->m_bShotIR && pWnd->m_bSendKey)
 			{

+ 33 - 24
SATHelper/SATHelper/SATClient.cpp

@@ -74,6 +74,11 @@ CSATClient::~CSATClient(void)
 
 bool CSATClient::OnSend(const byte* pData, int nLen)
 {
+	if (!m_bSocket) {
+		if (!Start())
+			return false;
+	}
+
 	CDlgProBar dlg;
 	g_pDlgProBar = &dlg;
 	DWORD dwLen = m_SocketClient.Write((const LPBYTE)pData, nLen);
@@ -233,7 +238,7 @@ void CSATClient::TaskProcess(SATProtocol::Package* pak)
 	if (pHeader->protocol == 0xAA) {
 #ifdef _DEBUG
 		// 延长加载框显示时间;
-		Sleep(15000);
+		Sleep(500);
 #endif
 		if (g_pDlgProBar) {
 			while (!::IsWindow(g_pDlgProBar->m_hWnd));
@@ -244,13 +249,22 @@ void CSATClient::TaskProcess(SATProtocol::Package* pak)
 		switch (pHeader->cmd)
 		{
 			case SATProtocol::CMD_LOGIN:
+			case SATProtocol::CMD_LOGOUT:
 			{
 				SATProtocol::LoginResp* resp = (SATProtocol::LoginResp*)pak->buf;
-				SATData::login_resp.bStatus = resp->bStatus;
-				_stprintf_s(SATData::login_resp.szMessage, _T("%s"), resp->szMessage);
+				if (pHeader->cmd == SATProtocol::CMD_LOGIN)
+				{
+					SATData::logout_resp.bStatus = false;
+					SATData::login_resp.bStatus = resp->bStatus;
+					_stprintf_s(SATData::login_resp.szMessage, _T("%s"), resp->szMessage);
+				}
+				else
+				{
+					SATData::login_resp.bStatus = false;
+					SATData::logout_resp.bStatus = resp->bStatus;
+					_stprintf_s(SATData::logout_resp.szMessage, _T("%s"), resp->szMessage);
+				}
 			}
-			break;
-			case SATProtocol::CMD_LOGOUT:
 				break;
 			case SATProtocol::CMD_ADD_DEVICE:
 				break;
@@ -266,7 +280,6 @@ void CSATClient::TaskProcess(SATProtocol::Package* pak)
 
 BOOL CSATClient::Start()
 {
-	//std::string strAddr = "10.118.158.175";
 	std::string strAddr = "";
 	std::string strPort = "5588";
 	int nFamily = (m_nMode == AF_IPV4) ? AF_INET : AF_INET6;
@@ -278,20 +291,19 @@ BOOL CSATClient::Start()
 		m_bSocket = FALSE;
 		return FALSE;
 	}
-	else
-	{
-		m_bSocket = TRUE;
-		CSocketHandle* pSH = (CSocketHandle*)m_SocketClient;
 
-		// 设置等待数据为0;
-		pSH->m_nPendingSize = 0;
-		memset(pSH->m_PendingBuffer, 0, SOCKET_BUFFSIZE);
+	// 成功连接服务器;
+	m_bSocket = TRUE;
+	CSocketHandle* pSH = (CSocketHandle*)m_SocketClient;
+
+	// 设置等待数据为0;
+	pSH->m_nPendingSize = 0;
+	memset(pSH->m_PendingBuffer, 0, SOCKET_BUFFSIZE);
+
+	// 设置多播;
+	SetupMCAST();
+	return TRUE;
 
-		// 设置多播;
-		SetupMCAST();
-		return TRUE;
-	}
-	return 0;
 }
 
 void CSATClient::Stop()
@@ -325,11 +337,8 @@ void CSATClient::GetAddress(const SockAddrIn& addrIn, CString& rString) const
 	rString.Format(_T("%s : %d"), szIPAddr, static_cast<int>(static_cast<UINT>(ntohs(addrIn.GetPort()))));
 }
 
-bool CSATClient::TCPLogin(std::string strUserName, std::string strPassword)
+bool CSATClient::TCPLogin(std::string strUserName, std::string strPassword, BOOL bLogin)
 {
-	if (!m_bSocket)	Start();
-	if (!m_bSocket)	return false;
-
 	SATData::login_resp = {0};
 	int len = HEADER_LEN + sizeof(SATProtocol::UserInfo);
 	byte* pbuff = new byte[len];
@@ -338,7 +347,7 @@ bool CSATClient::TCPLogin(std::string strUserName, std::string strPassword)
 
 	pData->header.protocol = 0xAA;
 	pData->header.len = len;
-	pData->header.cmd = SATProtocol::CMD_LOGIN;
+	pData->header.cmd = bLogin ? SATProtocol::CMD_LOGIN : SATProtocol::CMD_LOGOUT;
 
 	memcpy(pData->buf, strUserName.c_str(), strUserName.size());
 	memcpy(pData->buf + MAX_PATH, strPassword.c_str(), strPassword.size());
@@ -351,5 +360,5 @@ bool CSATClient::TCPLogin(std::string strUserName, std::string strPassword)
 
 bool CSATClient::TCPLogout(std::string strUserName, std::string strPassword)
 {
-	return false;
+	return TCPLogin(strUserName, strPassword, FALSE);
 }

+ 1 - 1
SATHelper/SATHelper/SATClient.h

@@ -57,7 +57,7 @@ public:
 	void GetAddress(const SockAddrIn& addrIn, CString& rString) const;
 
 	// 怬;
-	bool TCPLogin(std::string strUserName, std::string strPassword);
+	bool TCPLogin(std::string strUserName, std::string strPassword, BOOL bLogin = TRUE);
 	// µÇ³ö;
 	bool TCPLogout(std::string strUserName, std::string strPassword);
 

+ 1 - 0
SATHelper/SATHelper/SATData.cpp

@@ -4,4 +4,5 @@
 namespace SATData {
 	SATProtocol::UserInfo login;
 	SATProtocol::LoginResp login_resp;
+	SATProtocol::LoginResp logout_resp;
 };

+ 2 - 0
SATHelper/SATHelper/SATData.h

@@ -9,6 +9,8 @@ namespace SATData {
 	extern SATProtocol::UserInfo login;
 	// µÇ¼·µ»Ø;
 	extern SATProtocol::LoginResp login_resp;
+	// µÇ³ö·µ»Ø;
+	extern SATProtocol::LoginResp logout_resp;
 };
 
 #endif // __SAT_DATA__