亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ndkclient.cpp

?? 開發環境為VC++ 的數據庫管理系統
?? CPP
字號:
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// NDK 2.0 - Network Development Kit                                          //
//                                                                            //
// Authors: Sebastien Lachance                                                //
//                                                                            //
// E-mail:  netblitz@rocler.qc.ca                                             //
//                                                                            //
// -------------------------------------------------------------------------- //
//                                                                            //
// Permission to use, copy, modify, and distribute this software for any      //
// purpose and without fee is hereby granted. This is no guarantee about the  //
// use of this software. For any comments, bugs or thanks, please email us.   //
//                                                                            //
// -------------------------------------------------------------------------- //
//                                                                            //
// Targeted Platform: Any Windows version                                     //
//                                                                            //
// Last modification: January 2002                                            //
//                                                                            //
// History:                                                                   //
//                                                                            //
// 1- First release of this file.                                             //
// 2- The class is renamed and some optimizations are applied. Hungarian      //
//    notation is used.                                                       //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Includes                                                                   //
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "NDKClient.h"
#include "NDKDefines.h"
#include "NDKClientSocket.h"
#include "NDKMessage.h"


////////////////////////////////////////////////////////////////////////////////
// Constructor / Destructor                                                   //
////////////////////////////////////////////////////////////////////////////////

// Constructor.
CNDKClient::CNDKClient()
{
	m_pClientSocket = NULL;
	m_pFile = NULL;
	m_pArchiveIn = NULL;
	m_pArchiveOut = NULL;
}


// Destructor.
CNDKClient::~CNDKClient()
{
	CloseConnection();
	CleanUp();
}


////////////////////////////////////////////////////////////////////////////////
// Attributes                                                                 //
////////////////////////////////////////////////////////////////////////////////

// Returns if the client is connected to the server.
BOOL CNDKClient::IsConnected() const
{
	return m_pClientSocket != NULL;
}


// Gets the IP address and port number of the client.
BOOL CNDKClient::GetIpAndPort(CString& strIp, long& lPort) const
{
	BOOL bResult = FALSE;

	if (m_pClientSocket != NULL)
	{
		UINT unPort = 0;

		bResult = m_pClientSocket->GetSockName(strIp, unPort);

		lPort = unPort;
	}

	return bResult;
}


////////////////////////////////////////////////////////////////////////////////
// Operations                                                                 //
////////////////////////////////////////////////////////////////////////////////

// Opens a connection to the server, given its IP address and the port 
// number. The IP can be a machine name as "ftp.ndk.com", or a dotted number 
// as "123.456.78.9".
BOOL CNDKClient::OpenConnection(const CString& strServerIp, long lPort)
{
	BOOL bResult = FALSE;

	CloseConnection();

	if (AfxSocketInit())
	{
		m_pClientSocket = new CNDKClientSocket(this);

		// Create the socket and try to connect to the server.
		if ((m_pClientSocket != NULL) && m_pClientSocket->Create() && 
			m_pClientSocket->Connect(strServerIp, lPort))
		{
			m_pFile = new CSocketFile(m_pClientSocket);

			if (m_pFile != NULL)
			{
				TRY
				{
					m_pArchiveIn = new CArchive(m_pFile, CArchive::load);
					m_pArchiveOut = new CArchive(m_pFile, CArchive::store);
					bResult = TRUE;
				}
				CATCH(CArchiveException, e)
				{
				}
				CATCH(CFileException, e)
				{
				}
				END_CATCH
			}
		}
	}

	if (!bResult)
		CleanUp();

	return bResult;
}


// Closes an established connection with the server and a message is sent to
// the server. OnDisconnection callback will be call with the value
// NDKNormalDisconnection.
void CNDKClient::CloseConnection()
{
	SendMessageToServer(CNDKMessage(NDKClientDisconnect));

	CloseConnection(NDKClient_NormalDisconnection);
}


// Sends a message to the server. If a problem occurs, the connection will
// be closed and OnDisconnect callback will be called with the value 
// NDKErrorSendingMessage.
BOOL CNDKClient::SendMessageToServer(CNDKMessage& message)
{
	BOOL bResult = FALSE;
	
	if (m_pArchiveOut != NULL)
	{
		TRY
		{
			message.Serialize(*m_pArchiveOut);
			m_pArchiveOut->Flush();
			bResult = TRUE;
		}
		CATCH(CFileException, e)
		{
			m_pArchiveOut->Abort();
			
			CloseConnection(NDKClient_ErrorSendingMessage);
		}
		END_CATCH
	}

	return bResult;
}


// Pings the server. OnPing callback will be called when the client
// receives the response from the server. If a problem occurs, the 
// connection will be closed and OnDisconnect callback will be called with 
// the value NDKErrorSendingMessage. Overrides OnPing in the derived class if
// PingServer is used.
BOOL CNDKClient::PingServer()
{
	CNDKMessage message(NDKPingServer);
	message.Add((long)GetTickCount());

	return SendMessageToServer(message);
}


////////////////////////////////////////////////////////////////////////////////
// Protected Operations                                                       //
////////////////////////////////////////////////////////////////////////////////

// Called when the ping from the server is received. The number of
// milliseconds is returned since PingServer was called
void CNDKClient::OnPing(long lNbMilliseconds)
{
	ASSERT(FALSE); // Overrides this method in the derived class.
}


////////////////////////////////////////////////////////////////////////////////
// Private Operations                                                         //
////////////////////////////////////////////////////////////////////////////////

// Processes pending read. If a problem occurs, the connection will
// be closed and OnDisconnect callback will be called with the value 
// NDKErrorReceivingMessage.
BOOL CNDKClient::ProcessPendingRead(long lErrorCode)
{
	BOOL bIsConnectionOpened = TRUE;

	CNDKMessage message;

	if (lErrorCode == 0)
	{
		do
		{
			TRY
			{
				message.Serialize(*m_pArchiveIn);

				TranslateMessage(message);
			}
			CATCH(CFileException, e)
			{
				if (m_pArchiveOut != NULL)
					m_pArchiveOut->Abort();

				// Close the connection when an error occured
				CloseConnection(NDKClient_ErrorReceivingMessage);

				bIsConnectionOpened = FALSE;
			}
			END_CATCH

		} while ((m_pArchiveIn != NULL) && !m_pArchiveIn->IsBufferEmpty());
	}
	else
	{
		if (m_pArchiveOut != NULL)
			m_pArchiveOut->Abort();

		CloseConnection(NDKClient_ErrorReceivingMessage);

		bIsConnectionOpened = FALSE;
	}

	return bIsConnectionOpened;
}


// Translates message and does the appropriate task for message handled by
// the NDK.
void CNDKClient::TranslateMessage(CNDKMessage& message)
{
	switch (message.GetId())
	{
	case NDKServerClose:
		CloseConnection(NDKClient_ServerStop);
		break;

	case NDKServerDisconnectClient:
		CloseConnection(NDKClient_ServerCloseConnection);
		break;

	case NDKPingClient:
		SendMessageToServer(message);
		break;

	case NDKPingServer:
		{
			long lNbMilliseconds = 0;
			message.GetAt(0, lNbMilliseconds);
			
			OnPing(::GetTickCount() - lNbMilliseconds);
		}
		break;

	default:
		OnMessage(message);
		break;
	}
}


// Closes the connection.
void CNDKClient::CloseConnection(NDKClientDisconnection disconnectType)
{
	BOOL bIsConnected = (m_pClientSocket != NULL);

	CleanUp();

	// Call OnDisconnect only when a connection was there
	if (bIsConnected)
		OnDisconnect(disconnectType);
}


// Cleans up.
void CNDKClient::CleanUp()
{
	if (m_pArchiveOut != NULL)
	{
		delete m_pArchiveOut;
		m_pArchiveOut = NULL;
	}

	if (m_pArchiveIn != NULL)
	{
		delete m_pArchiveIn;
		m_pArchiveIn = NULL;
	}

	if (m_pFile != NULL)
	{
		delete m_pFile;
		m_pFile = NULL;
	}

	if (m_pClientSocket != NULL)
	{
		m_pClientSocket->Close();

		delete m_pClientSocket;
		m_pClientSocket = NULL;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区视频视频| 国产成人精品1024| 在线亚洲人成电影网站色www| 国产精品午夜免费| 不卡一区二区在线| 综合欧美亚洲日本| 欧美性xxxxx极品少妇| 婷婷综合在线观看| 日韩美女主播在线视频一区二区三区| 久久精品国产亚洲5555| 国产亚洲精品资源在线26u| 99久久99久久免费精品蜜臀| 亚洲蜜臀av乱码久久精品| 欧美群妇大交群的观看方式| 九一久久久久久| 国产精品福利av| 这里只有精品视频在线观看| 国产美女一区二区| 亚洲精品久久久久久国产精华液| 在线观看91av| 国产成人精品亚洲日本在线桃色| 一区二区三区视频在线看| 日韩亚洲欧美在线| 99re亚洲国产精品| 人禽交欧美网站| 国产精品美女久久久久高潮| 欧美日韩一区成人| 国产一区二区三区四区五区入口 | 欧美三级乱人伦电影| 捆绑调教美女网站视频一区| 中文字幕中文字幕一区| 91精品啪在线观看国产60岁| 不卡的电影网站| 日韩av在线发布| 亚洲欧美偷拍卡通变态| 日韩欧美的一区| 91国偷自产一区二区三区观看| 秋霞午夜鲁丝一区二区老狼| 国产精品久久久久久久久久免费看 | 欧美日韩免费电影| 成人激情小说乱人伦| 五月综合激情婷婷六月色窝| 国产日韩精品一区| 欧美精品亚洲一区二区在线播放| 成人性生交大合| 久久电影网电视剧免费观看| 亚洲免费电影在线| 国产精品毛片久久久久久| 欧美精品自拍偷拍| 91蜜桃视频在线| 国产成人综合在线| 黄网站免费久久| 日韩在线卡一卡二| 亚洲自拍偷拍av| 国产精品毛片无遮挡高清| 久久日韩粉嫩一区二区三区| 337p亚洲精品色噜噜| 色婷婷久久综合| 91丨porny丨国产| 国产suv精品一区二区6| 久久99在线观看| 久久99久久99小草精品免视看| 亚洲综合久久av| 亚洲免费伊人电影| ...av二区三区久久精品| 久久久一区二区三区捆绑**| 精品国产一二三| 精品国产不卡一区二区三区| 欧美日韩一区二区在线观看| 欧美性生活久久| 欧美日韩综合色| 欧美日韩免费观看一区二区三区 | 国产片一区二区| 久久婷婷国产综合精品青草 | 欧美日韩精品一区视频| 欧美亚洲一区三区| 欧美日韩综合在线| 欧美高清视频在线高清观看mv色露露十八 | 久久久www免费人成精品| 欧美一区二区三区四区视频| 欧美一级日韩免费不卡| 日韩一区二区在线观看| 91精品国产综合久久久久| 91麻豆精品国产无毒不卡在线观看 | av亚洲精华国产精华| www.日韩在线| 色婷婷综合视频在线观看| 欧美午夜一区二区三区免费大片| 欧美人动与zoxxxx乱| 欧美大度的电影原声| 久久精品亚洲麻豆av一区二区| 久久精品视频免费| 国产精品久久影院| 亚洲一二三区在线观看| 日本午夜一本久久久综合| 老司机精品视频导航| 国产成人一级电影| 91色|porny| 在线电影国产精品| 久久久久国产精品厨房| 亚洲人成7777| 日本欧美在线看| 国产.欧美.日韩| 欧美日韩免费一区二区三区| 欧美日韩在线播放三区四区| 欧美成人精品3d动漫h| 国产蜜臀97一区二区三区| 一区二区欧美精品| 久久99精品久久久久久国产越南| 成人综合婷婷国产精品久久免费| 色婷婷精品久久二区二区蜜臀av| 4438x亚洲最大成人网| 国产欧美日韩麻豆91| 亚洲高清视频中文字幕| 国产高清无密码一区二区三区| 国产美女在线观看一区| 91精品1区2区| 欧美精品一区二区三区蜜臀| 亚洲免费在线视频| 国产做a爰片久久毛片| 色婷婷精品大在线视频| 精品久久久久久亚洲综合网| 亚洲天堂2014| 国产一区不卡在线| 欧美日韩免费高清一区色橹橹 | 亚洲乱码日产精品bd| 免费人成精品欧美精品| 91美女精品福利| 26uuu亚洲| 日日摸夜夜添夜夜添国产精品 | 欧美日韩一级片网站| 中文av字幕一区| 久久99精品国产91久久来源| 91久久一区二区| 中文字幕欧美三区| 久久不见久久见免费视频1| 色美美综合视频| 国产精品麻豆一区二区| 精品一区在线看| 欧美精品第1页| 一区二区欧美视频| 99国产精品久| 日本一区二区三区dvd视频在线| 免费精品99久久国产综合精品| 在线视频你懂得一区二区三区| 欧美国产精品一区| 国产美女一区二区三区| 精品国偷自产国产一区| 午夜国产精品一区| 欧亚洲嫩模精品一区三区| 久久久噜噜噜久久人人看 | 一区二区三区不卡在线观看| 国产91精品入口| 久久久久久久久蜜桃| 精品亚洲国产成人av制服丝袜| 制服丝袜亚洲精品中文字幕| 亚洲一区中文在线| 在线免费观看视频一区| 亚洲精品视频一区| 91同城在线观看| 亚洲欧美日韩电影| 色综合久久久久综合体桃花网| 国产精品久久久久久亚洲毛片| 成人av网在线| 亚洲色图.com| 91丨porny丨国产入口| 亚洲婷婷综合色高清在线| 99久久综合色| 亚洲色欲色欲www| 色婷婷久久综合| 亚洲国产精品久久不卡毛片 | 欧美变态口味重另类| 免费成人在线观看| 精品国产乱码久久久久久久久| 久久不见久久见免费视频1| 精品国产乱码久久久久久闺蜜| 激情综合色播激情啊| 久久精品一区二区| 99久精品国产| 亚洲动漫第一页| 日韩三区在线观看| 国产中文一区二区三区| 国产欧美日韩亚州综合| 色香色香欲天天天影视综合网| 午夜影院在线观看欧美| 欧美一区二区黄| 国产超碰在线一区| 亚洲精品视频在线观看网站| 欧美日韩夫妻久久| 国产一区二区在线视频| 亚洲欧洲av色图| 69堂国产成人免费视频| 国产精品资源在线看| 亚洲欧美视频在线观看| 欧美电影在哪看比较好| 国产成人在线影院| 亚洲图片有声小说| 久久综合色一综合色88| 91免费在线视频观看| 日本aⅴ精品一区二区三区|