亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99riav久久精品riav| 国产女人18毛片水真多成人如厕| 另类人妖一区二区av| 日本电影欧美片| 亚洲另类在线视频| 欧美亚洲高清一区二区三区不卡| 亚洲一区二区av电影| 欧美高清激情brazzers| 久久国产综合精品| 国产亲近乱来精品视频| 91亚洲男人天堂| 亚洲第一在线综合网站| 欧美va亚洲va在线观看蝴蝶网| 九九热在线视频观看这里只有精品| 久久无码av三级| 91视频你懂的| 美女尤物国产一区| 国产精品亲子伦对白| 欧美性感一区二区三区| 麻豆成人久久精品二区三区红| 国产亚洲自拍一区| 色狠狠色狠狠综合| 美腿丝袜亚洲一区| 国产精品久久久久四虎| 欧美亚洲综合另类| 国产一区二区在线免费观看| 亚洲欧美视频在线观看| 日韩亚洲欧美成人一区| 国产成人免费在线视频| 亚洲一区二区在线免费观看视频| 精品久久人人做人人爱| 成人国产精品免费网站| 五月天激情小说综合| 久久精品亚洲一区二区三区浴池| 在线一区二区视频| 国产电影一区二区三区| 亚洲成人精品影院| 国产精品久久久久一区二区三区| 欧美一区二区三区性视频| www.综合网.com| 捆绑变态av一区二区三区| 亚洲精品乱码久久久久久黑人 | 久久av资源站| 亚洲精品写真福利| 国产欧美精品一区二区色综合| 欧美日韩视频第一区| 波多野结衣一区二区三区| 激情综合五月天| 午夜精品在线视频一区| 国产精品久久国产精麻豆99网站 | 国产综合成人久久大片91| 国产精品久久久久久久久免费相片 | 久久久夜色精品亚洲| 欧美日本精品一区二区三区| av亚洲精华国产精华精| 国产精品主播直播| 麻豆精品视频在线| 午夜视频在线观看一区二区| 自拍偷拍国产精品| 中文字幕中文乱码欧美一区二区| 精品理论电影在线观看 | 成人精品免费视频| 国产在线国偷精品产拍免费yy| 首页国产丝袜综合| 亚洲线精品一区二区三区八戒| 欧美激情一区二区| 国产网红主播福利一区二区| 精品久久久久久久一区二区蜜臀| 欧美日韩一区二区三区在线| 91色在线porny| 91视频免费观看| 色婷婷综合久久久久中文| 99riav一区二区三区| 色综合久久综合网欧美综合网| 粉嫩aⅴ一区二区三区四区| 国产馆精品极品| 国产精品影视天天线| 国内一区二区在线| 国产一区二区三区观看| 国产乱码精品一区二区三区忘忧草 | 极品少妇xxxx精品少妇| 成人欧美一区二区三区| 麻豆精品久久久| 亚洲婷婷在线视频| 中文字幕一区二区三| 日韩av在线播放中文字幕| 欧美哺乳videos| 久久这里只有精品视频网| 91精品国产品国语在线不卡| 日韩一区二区不卡| 亚洲精品在线观看视频| 国产女同互慰高潮91漫画| 最新国产精品久久精品| 一区二区在线观看不卡| 亚洲成人先锋电影| 韩国一区二区视频| 成人成人成人在线视频| 欧美视频完全免费看| 日韩一级黄色片| 国产欧美日韩另类视频免费观看| 国产精品麻豆视频| 亚洲一区二区三区四区在线观看 | 久久精品国产免费| 国产一区二区精品久久91| 成人国产精品视频| 欧美日韩你懂得| 精品电影一区二区| 自拍偷在线精品自拍偷无码专区| 亚洲影视在线观看| 蓝色福利精品导航| 91亚洲午夜精品久久久久久| 欧美丰满一区二区免费视频| 久久久久久久久久久99999| 亚洲欧洲国产日韩| 日韩二区三区在线观看| 成人毛片视频在线观看| 欧美日韩一区二区电影| 久久亚洲一区二区三区明星换脸| 国产精品精品国产色婷婷| 日韩二区三区在线观看| 91首页免费视频| 精品国产免费一区二区三区四区| 成人欧美一区二区三区白人 | 亚洲成人免费看| 成人午夜激情影院| 7777精品伊人久久久大香线蕉的| 国产欧美一区二区精品忘忧草| 一区二区不卡在线播放| 国产精品资源在线看| 欧美高清视频www夜色资源网| 久久精品人人爽人人爽| 日韩国产欧美在线观看| 99视频在线精品| 欧美r级在线观看| 亚洲国产精品久久人人爱蜜臀 | 亚洲精品v日韩精品| 久久疯狂做爰流白浆xx| 欧美性做爰猛烈叫床潮| 国产精品美女久久久久aⅴ| 久久成人免费日本黄色| 精品视频在线视频| 亚洲视频一二三| 国产不卡免费视频| 欧美mv日韩mv国产| 亚洲成人你懂的| 在线精品视频免费播放| 中文字幕一区二区三区视频| 激情图区综合网| 欧美一级片在线看| 亚洲18影院在线观看| 一本色道久久综合亚洲精品按摩| 久久久久久久网| 久88久久88久久久| 日韩一级完整毛片| 日韩影院精彩在线| 欧美色老头old∨ideo| 亚洲欧洲另类国产综合| 国产**成人网毛片九色| 久久综合狠狠综合久久综合88| 日本在线不卡视频一二三区| 欧美性感一类影片在线播放| 亚洲情趣在线观看| 成人av手机在线观看| 中文字幕中文字幕中文字幕亚洲无线| 国产精品中文字幕日韩精品| 精品欧美乱码久久久久久1区2区| 天堂久久一区二区三区| 欧美酷刑日本凌虐凌虐| 亚洲成人免费在线| 欧美一级艳片视频免费观看| 日韩高清一级片| 欧美一级久久久| 毛片不卡一区二区| 亚洲精品在线网站| 成人一区二区三区视频| 国产精品伦一区| 一本色道久久综合亚洲aⅴ蜜桃 | 韩国精品在线观看| 久久综合99re88久久爱| 国产福利一区二区三区视频在线| 国产女人18水真多18精品一级做| 成人激情黄色小说| 亚洲激情成人在线| 欧美日韩色综合| 精品一区二区三区免费毛片爱| www成人在线观看| 成a人片亚洲日本久久| 亚洲三级久久久| 欧美日韩国产123区| 免费av成人在线| 国产视频一区二区三区在线观看| 成人av午夜电影| 亚洲成人高清在线| 久久一区二区三区国产精品| 成人一二三区视频| 亚洲成人自拍网| 国产日韩欧美制服另类| 色综合色综合色综合色综合色综合| 亚洲一区二区精品久久av| 欧美一卡二卡三卡|