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

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

?? chatserver.cpp

?? 網(wǎng)絡編程
?? CPP
字號:
// ChatServer.cpp : implementation file
//

#include "stdafx.h"
#include "Chat Server.h"
#include "ChatServer.h"

#include "MainSheet.h"
#include "ListeningSocket.h"
#include "ClientSocket.h"
#include "pkg.h"

//#include "ClientListCtrl.h"

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

/////////////////////////////////////////////////////////////////////////////
// CChatServer property page

IMPLEMENT_DYNCREATE(CChatServer, CPropertyPage)

CChatServer::CChatServer() : CPropertyPage(CChatServer::IDD)
{
	//{{AFX_DATA_INIT(CChatServer)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_pListenSocket = NULL;
	bListening = FALSE;
	m_clientNames = "";
}

CChatServer::~CChatServer()
{
	CloseListening();
	m_clientNames = "";
}

void CChatServer::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChatServer)
	DDX_Control(pDX, IDC_LIST1, m_ClientListCtrl);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChatServer, CPropertyPage)
	//{{AFX_MSG_MAP(CChatServer)
	ON_BN_CLICKED(IDC_START, OnStart)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChatServer message handlers

BOOL CChatServer::PreTranslateMessage (MSG* pMsg)
{
	// Let the ToolTip process this message.
	m_tooltip.RelayEvent(pMsg);

	return CPropertyPage::PreTranslateMessage(pMsg);
}

BOOL CChatServer::OnInitDialog()
{
	CPropertyPage::OnInitDialog();

	// Create the ToolTip control.
	m_tooltip.Create (this);
	m_tooltip.Activate (TRUE);

	// TODO: Use one of the following forms to add controls:
	// m_tooltip.AddTool (GetDlgItem (IDC_<name>), <string-table-id>);
	// m_tooltip.AddTool (GetDlgItem (IDC_<name>), _T ("<text>"));

	//set imagelist for the listctrl
	m_imgComputer.Create(16,16,TRUE,1,1);
	m_imgComputer.Add(AfxGetApp()->LoadIcon(IDI_ICON1));

	//start listening
	BeginListening(1500);


	return TRUE;
}

void CChatServer::OnStart() 
{
	// TODO: Add your control notification handler code here
	bListening = !bListening;

	CString strTitle;
	CButton* pButton = (CButton*)GetDlgItem(IDC_START);
	pButton->GetWindowText(strTitle);
	
	if(strTitle == "Start"){
		if(!m_ContactList.IsEmpty()){
			UpdateInfo2All("Server is now starting listening again.",SVRSTART);
		}
		strTitle = "Stop";
		CStatic* pStatic = (CStatic*)GetDlgItem(IDC_IPADDRESS);
		pStatic->SetWindowText(GetServerIP());
		pStatic->EnableWindow(TRUE);
	}
	else{
		UpdateInfo2All(
			" The Server is now stopping listening.But your Link still exists. Pls try again later. Sorry for any inconvinience.",
			SVRSTOP);
		strTitle = "Start";
		CStatic* pStatic = (CStatic*)GetDlgItem(IDC_IPADDRESS);
		pStatic->SetWindowText(GetServerIP());
		pStatic->EnableWindow(FALSE);
	}


	pButton->SetWindowText(strTitle);

}

void CChatServer::SetOwner(CMainSheet *pMainSheet)
{
	m_pMainSheet = pMainSheet;
}

BOOL CChatServer::BeginListening(UINT port)
{
	ASSERT(m_pListenSocket == NULL);
		
	if(!m_ContactList.IsEmpty())
		CloseAllClients();

	m_pListenSocket = new CListeningSocket(this);
	m_pListenSocket->Create(port);
//	bListening = TRUE;
	return m_pListenSocket->Listen();
//		((CEditView*)m_viewList.GetHead())->SetWindowText(_T("Begin listening ..."));
}

void CChatServer::ProcessClientPkg(CClientSocket *pSocket)
{
	CPkg pkg;
	ASSERT(pSocket);
	
	try{
		
		// the next line of code was first not included in the bListening == FALSE block
		// and caused some error: for that part the Archive buffer was just full.
		// Now I moved it outside of the if-else block so that it applys both parts.
		pSocket->ReceivePkg(&pkg);
		if(bListening){
			if(pkg.request == NEW){
				if(IsThisNameBeingUsed(pkg,pSocket)){
					Server2Indivisual(pSocket,"Sorry. The screen name is being used. Try using another one.Thank you.",SIGNOUT);
					return;
				}

				UpdateClientInfo(&pkg,pSocket);
				CString strReminder;
				strReminder.Format("%s  just signed in.", pkg.strName);

				UpdateListCtrl();
				UpdateInfo2All(strReminder,NEW);

				// log message sent to the log page
				CTime time= CTime::GetCurrentTime();;
				CString strTmp = time.Format(" Time is:  %H:%M:%S. Date is: %A, %B %d, %Y");
				strReminder += strTmp;
				m_pMainSheet->SetLogMessage(strReminder);
				
			}
			if(pkg.request == OFF){
				CString strReminder;
				strReminder.Format("%s  just logged off.", pkg.strName);

				DeleteIndivisual(pkg.strName);
				UpdateListCtrl();
				UpdateInfo2All(strReminder,OFF);
				
				// log message sent to the log page
				CTime time= CTime::GetCurrentTime();;
				CString strTmp = time.Format(" Time is:  %H:%M:%S. Date is: %A, %B %d, %Y");
				strReminder += strTmp;
				m_pMainSheet->SetLogMessage(strReminder);
			}
			if(pkg.request == MESG ){
				UpdateClientInfo(&pkg,pSocket);
				Send2AllClients(&pkg);
			}
		}
	}
	catch(CFileException* e){
		TCHAR szCause[255];
		e->GetErrorMessage(szCause,255);
		AfxMessageBox(szCause);
	}
}

void CChatServer::Send2AllClients(CPkg *pkg)
{
	for(POSITION pos = m_ContactList.GetHeadPosition(); pos != NULL;){
		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);
		ASSERT(pClient);
		CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
		ASSERT(pSocket);	
		try{
			pSocket->SendPkg(pkg);
		}
		catch(CFileException* e){
			TCHAR szCause[255];
			e->GetErrorMessage(szCause,255);
			AfxMessageBox(szCause);
		}
	}
}

void CChatServer::CloseAllClients()
{
	for(POSITION pos = m_ContactList.GetHeadPosition();pos != NULL;){
		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);
		ASSERT(pClient);
		CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
		pSocket->Close();
		if(pSocket != NULL) {delete pSocket;pSocket = NULL;}
		//		pSocket->Finalize();
		delete pClient;
		pClient = NULL;
	}
	m_ContactList.RemoveAll();
}

void CChatServer::CloseListening()
{
	if(m_pListenSocket == NULL) return ;

	//close the linked client and clear up the contact list
	CloseAllClients();
	m_pListenSocket->Close();
	delete m_pListenSocket;
	m_pListenSocket = NULL;
	bListening = FALSE;
}


//when got a connection message from a client
void CChatServer::ProcessAccept()
{
	CClientSocket* pSocket = new CClientSocket(this);
	m_pListenSocket->Accept(*pSocket);
	pSocket->Init();

	CString ipAddress;
	UINT port;
	pSocket->GetPeerName(ipAddress,port);	
	


	//send the connection confirmation to the client,add to the list - yh
	CPkg pkg;
	pkg.Init();
	pkg.strName = _T("Server");
	pkg.strText = "Connected. Please Sign in now ...";
	pkg.clrText = RGB(0,0,0);
	pkg.bBold = 1;//bold
	pkg.fontName = "system";
	pkg.fontSize = 12;
	pkg.clrText = RGB(0,0,255);//blue
	pkg.request = CONN;

	pSocket->SendPkg(&pkg);



	CPkg* pTmp;
	pTmp = new CPkg;
	ASSERT(pTmp);

	pTmp->Init();
	pTmp->ipAddress = ipAddress;
	pTmp->port = port;
	pTmp->pSocket = (DWORD)pSocket;

	if(m_ContactList.IsEmpty()){
		m_ContactList.AddHead(pTmp);
	}
	else{
		m_ContactList.AddTail(pTmp);
	}
}



BOOL CChatServer::IsThisNameBeingUsed(CPkg& pkg,CClientSocket* pSocket)
{
	if(m_ContactList.IsEmpty()) return TRUE;
	
	CString name = pkg.strName;
//	CClientSocket* pSocket = (CClientSocket*)pkg.pSocket;
	ASSERT(pSocket);

	for(POSITION pos = m_ContactList.GetHeadPosition();pos != NULL;){
		CPkg* pPkg = (CPkg*)m_ContactList.GetNext(pos);
		ASSERT(pPkg);
		if(name == "Server") return TRUE; // this name is used by server only!
		if(name == pPkg->strName && pSocket != (CClientSocket*)pPkg->pSocket) return TRUE;
	}
	return FALSE;
}

void CChatServer::Server2Indivisual(CString name, CString strMessage,int request)
{
	for(POSITION pos = m_ContactList.GetHeadPosition(); pos != NULL;){
		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);
		ASSERT(pClient);
		if(pClient->strName != name) continue;
		try{
			CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
			ASSERT(pSocket);	
		
			CPkg pkg;
			pkg.Init();
			pkg.strName = _T("Server");
			pkg.strText = strMessage;
			pkg.clrText = RGB(0,0,0);
			pkg.bBold = 1;//bold
			pkg.clrText = RGB(0,0,255);//blue
			pkg.fontName = "system";
			pkg.fontSize = 12;
			pkg.request = request;
			pSocket->SendPkg(&pkg);

		}
		catch(CFileException* e){
			TCHAR szCause[255];
			e->GetErrorMessage(szCause,255);
			AfxMessageBox(szCause);
		}
	}
}

void CChatServer::Server2Indivisual(CClientSocket* pSocket, CString strMessage,int request)
{
	for(POSITION pos = m_ContactList.GetHeadPosition(); pos != NULL;){
		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);
		ASSERT(pClient);
		if((CClientSocket*)pClient->pSocket != pSocket) continue;
		try{
			CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
			ASSERT(pSocket);	
		
			CPkg pkg;
			pkg.Init();
			pkg.strName = _T("Server");
			pkg.strText = strMessage;
			pkg.clrText = RGB(0,0,0);
			pkg.bBold = 1;//bold
			pkg.fontSize = 12;
			pkg.clrText = RGB(0,0,255);//blue
			pkg.fontName = "system";
			pkg.request = request;
			pSocket->SendPkg(&pkg);

		}
		catch(CFileException* e){
			TCHAR szCause[255];
			e->GetErrorMessage(szCause,255);
			AfxMessageBox(szCause);
		}
	}
}

void CChatServer::UpdateInfo2All(CString msg,int request)
{
	CPkg pkg;
	CString nameString = "";

	for(POSITION pos = m_ContactList.GetHeadPosition(); pos != NULL;){

		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);
		nameString += pClient->strName;
		nameString += ";";
	}
	for(pos = m_ContactList.GetHeadPosition(); pos != NULL;){
		
		CPkg* pClient = (CPkg*)m_ContactList.GetNext(pos);

		pkg.bBold = 1;//bold
		pkg.clrText = RGB(0,0,255);//blue
		pkg.strName = nameString;
		pkg.strText = msg;
		pkg.request = request;

		try{
			CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
			ASSERT(pSocket);	
			pSocket->SendPkg(&pkg);

		}
		catch(CFileException* e){
			TCHAR szCause[255];
			e->GetErrorMessage(szCause,255);
			AfxMessageBox(szCause);
		}		
	}
	nameString = "";
}

void CChatServer::UpdateClientInfo(CPkg* pPkg,CClientSocket* pSocket)
{
	ASSERT(pSocket);
	ASSERT(pPkg);
//	CString name = pPkg->strName;
	
	for(POSITION pos = m_ContactList.GetHeadPosition();pos != NULL;){
		CPkg* pTmp = (CPkg*)m_ContactList.GetNext(pos);
		if(pSocket == (CClientSocket*)pTmp->pSocket){

			pTmp -> strText		= pPkg->strText;	//update the pkg info from client
			pTmp -> strName		= pPkg->strName;
			pTmp -> bAway		= pPkg->bAway;
			pTmp -> iMyIcon		= pPkg->iMyIcon;
			pTmp -> bBold		= pPkg->bBold ;
			pTmp -> bItalic		= pPkg-> bItalic;
			pTmp -> bUnderLine  = pPkg->bUnderLine;
			pTmp -> bStrikeOut	= pPkg->bStrikeOut;
			pTmp -> clrText		= pPkg->clrText;
			pTmp -> fontName	= pPkg->fontName;
			pTmp -> fontSize	= pPkg->fontSize;

//			pTmp -> ipAddress	= pPkg->ipAddress;
//			pTmp -> port		= pPkg->port;
//			pTmp -> request		= pPkg->request;
//			pTmp -> pSocket		= pPkg->pSocket;
			pPkg->ipAddress = pTmp->ipAddress;
			pPkg->port = pTmp->port;
			pPkg->pSocket = pTmp->pSocket;

			return ; //successful in update
		}
	}

}

void CChatServer::DeleteIndivisual(CString name)
{
	for(POSITION pos = m_ContactList.GetHeadPosition();pos != NULL;){
		CPkg* pClient = (CPkg*)m_ContactList.GetAt(pos);
		ASSERT(pClient);
		if(pClient->strName == name){
			m_ContactList.RemoveAt(pos);
			CClientSocket* pSocket = (CClientSocket*)pClient->pSocket;
			pSocket->Close();
			delete pSocket;
			pSocket = NULL;
			delete pClient;
			pClient = NULL;
			break;
		}
		else{
			m_ContactList.GetNext(pos);
		}
	}
}

void CChatServer::UpdateListCtrl()
{
	m_ClientListCtrl.DeleteAllItems();
	m_ClientListCtrl.SetImageList(&m_imgComputer,LVSIL_SMALL);
	LV_ITEM lvItem;
	
	int iActualItem,iItem,iSub;

	int length = m_ContactList.GetCount();
	for(iItem=0;iItem<length;iItem++){
		CPkg* pTmp = (CPkg*)m_ContactList.GetAt(m_ContactList.FindIndex(iItem));
		LPTSTR ipAddress = (pTmp->ipAddress).GetBuffer(pTmp->ipAddress.GetLength());
		CString tmp;
		tmp.Format("%d",pTmp->port);
		LPTSTR port = tmp.GetBuffer(tmp.GetLength());

		for(iSub = 0;iSub<3;iSub++){
			lvItem.mask = LVIF_TEXT|(iSub == 0? LVIF_IMAGE:0);
			lvItem.iItem = (iSub == 0)? iItem : iActualItem;
			lvItem.iSubItem  = iSub;
			lvItem.iImage = 0;
			lvItem.pszText = "";	//even you don't need this member,still declare it!
			if(iSub == 0)
	    		 iActualItem = m_ClientListCtrl.InsertItem(&lvItem);
			else{
				if(iSub == 1)
					lvItem.pszText  = ipAddress;
				else if(iSub == 2)
					lvItem.pszText = port;
				m_ClientListCtrl.SetItem(&lvItem);
			}
		}
	}
}

CString CChatServer::GetServerIP()
{
	char szHostName[200];
	gethostname(szHostName,strlen(szHostName));
	LPHOSTENT pHost;
	pHost = gethostbyname(szHostName);
	struct in_addr* ptr = (struct in_addr*)pHost->h_addr_list[0];
	int a = ptr->S_un.S_un_b.s_b1;
	int b = ptr->S_un.S_un_b.s_b2;
	int c = ptr->S_un.S_un_b.s_b3;
	int d = ptr->S_un.S_un_b.s_b4;
	
	CString strTmp;
	strTmp.Format("%d.%d.%d.%d",a,b,c,d);
	return strTmp;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内国产精品久久| 午夜婷婷国产麻豆精品| 成人激情图片网| 国产精品日日摸夜夜摸av| 国产suv精品一区二区883| 中文字幕一区二区三区不卡| 91美女福利视频| 亚洲va欧美va国产va天堂影院| 欧美日韩精品一区视频| 另类综合日韩欧美亚洲| 久久精品免费在线观看| 色婷婷综合久久久久中文 | 不卡在线视频中文字幕| 亚洲欧洲av一区二区三区久久| 91论坛在线播放| 三级影片在线观看欧美日韩一区二区 | 天堂av在线一区| 日韩精品专区在线影院观看| 国产精品亚洲综合一区在线观看| 国产精品嫩草久久久久| 欧美色偷偷大香| 国模套图日韩精品一区二区| 亚洲卡通动漫在线| 欧美成人r级一区二区三区| 成人在线视频一区二区| 亚洲国产精品尤物yw在线观看| 日韩一级免费一区| 99久久久久久99| 奇米精品一区二区三区四区| 国产精品久久久久aaaa| 欧美人与性动xxxx| 成人激情文学综合网| 日本在线不卡视频一二三区| 国产精品美女久久久久久久久| 欧美老年两性高潮| 成人av综合在线| 久久成人综合网| 亚洲午夜私人影院| 中文天堂在线一区| 日韩亚洲欧美成人一区| 色婷婷久久久综合中文字幕| 国精产品一区一区三区mba视频 | 久草在线在线精品观看| 亚洲激情校园春色| 中文一区二区在线观看| 日韩一级二级三级| 欧美色图激情小说| 91美女在线观看| 成人综合激情网| 精彩视频一区二区三区| 亚洲成av人片一区二区| 自拍av一区二区三区| 久久久91精品国产一区二区精品 | av成人老司机| 国产精品1区2区| 另类小说欧美激情| 日韩专区欧美专区| 一区二区三区在线观看视频| 国产精品蜜臀在线观看| 久久久久久久久久美女| 精品久久久久久综合日本欧美| 日韩一区日韩二区| 中文字幕一区二区三区蜜月| 国产女主播一区| 国产日韩欧美精品一区| 精品sm在线观看| 日韩免费一区二区三区在线播放| 欧美日韩精品专区| 欧美日韩高清一区二区三区| 在线观看亚洲a| 91国模大尺度私拍在线视频| 91在线精品一区二区| 99热99精品| 91久久精品一区二区三| 色综合久久中文字幕综合网| 色婷婷av久久久久久久| 色哟哟国产精品免费观看| 91香蕉视频mp4| 91在线精品一区二区三区| 91在线免费视频观看| 色婷婷av一区二区| 欧美久久一区二区| 欧美一级二级在线观看| 欧美精品一区二区蜜臀亚洲| 精品播放一区二区| 国产三级一区二区| 亚洲欧洲精品成人久久奇米网| 国产精品成人一区二区艾草| 亚洲女爱视频在线| 亚洲123区在线观看| 日本不卡视频一二三区| 欧美日韩成人在线| 日韩欧美亚洲国产精品字幕久久久| 日韩欧美123| 久久久久综合网| 亚洲欧美一区二区三区国产精品 | 亚洲黄色免费电影| 亚洲综合一区二区三区| 婷婷一区二区三区| 韩国av一区二区三区在线观看| 国产成人av自拍| 一本一本久久a久久精品综合麻豆| 在线亚洲一区二区| 日韩一级片网址| 国产精品久久看| 五月婷婷激情综合| 国产精品中文有码| 91国偷自产一区二区使用方法| 91精品久久久久久久久99蜜臂| 精品欧美一区二区久久 | 日韩一区欧美小说| 欧美a一区二区| 99精品视频中文字幕| 欧美日韩情趣电影| 国产网站一区二区三区| 亚洲一区二区精品3399| 黄色资源网久久资源365| 色综合欧美在线| 久久久久久9999| 亚洲国产综合色| 国产精品456露脸| 欧美高清视频一二三区| 中文字幕免费不卡在线| 婷婷国产在线综合| 99久久久久免费精品国产| 日韩免费高清视频| 亚洲国产日产av| 国产99精品视频| 欧美成人r级一区二区三区| 亚洲一区二区四区蜜桃| 国产九色sp调教91| 91精品国产色综合久久ai换脸 | 国产一区二区三区美女| 欧美午夜宅男影院| 欧美韩国日本一区| 久久精品噜噜噜成人88aⅴ| 欧美综合一区二区三区| 国产精品成人免费| 国产福利一区二区三区| 日韩一区二区电影在线| 香蕉影视欧美成人| 一本色道久久综合亚洲精品按摩| 国产性天天综合网| 免费欧美在线视频| 在线成人av网站| 亚洲综合丁香婷婷六月香| 国产成人午夜片在线观看高清观看| 欧美精品电影在线播放| 亚洲国产欧美在线人成| 色一区在线观看| 中文字幕一区二区三区色视频| 国产裸体歌舞团一区二区| 欧美一区二区三区视频在线观看| 一区二区欧美在线观看| 99久久婷婷国产综合精品| 国产精品久久影院| 成人app网站| 国产一区二区三区高清播放| 欧美精品aⅴ在线视频| 亚洲成人av福利| 欧美日韩国产色站一区二区三区| 亚洲精品成人悠悠色影视| 99综合影院在线| 亚洲欧洲无码一区二区三区| 成人av网站大全| 国产精品久久久久久久第一福利 | 国产亚洲精品aa午夜观看| 国产在线播放一区二区三区| 久久色.com| 国产毛片精品视频| 国产午夜精品久久久久久免费视| 国产乱码精品一区二区三| 久久九九久久九九| 成人免费高清在线| 亚洲天堂a在线| 日本精品视频一区二区三区| 亚洲成人免费影院| 91麻豆精品91久久久久久清纯| 蜜臀久久久99精品久久久久久| 日韩美女在线视频| 国产盗摄视频一区二区三区| 中文字幕日韩欧美一区二区三区| 色综合天天综合给合国产| 亚洲国产精品欧美一二99| 6080午夜不卡| 国产美女一区二区三区| 成人免费一区二区三区视频| 欧美性一级生活| 极品少妇xxxx精品少妇偷拍| 国产精品美女一区二区在线观看| 91麻豆国产自产在线观看| 午夜伦理一区二区| 26uuu久久天堂性欧美| 99国产精品久久| 青青草原综合久久大伊人精品| 久久久久久久久一| 欧美在线一区二区| 久久99久久精品欧美| 亚洲天堂网中文字| 91精选在线观看|