⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientthread.cpp

📁 自制的双子球游戏
💻 CPP
字号:
// ClientThread.cpp : implementation file
//

#include "stdafx.h"
#include "DBallGame.h"
#include "ClientThread.h"

#include "MyDef.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CClientThread

IMPLEMENT_DYNCREATE(CClientThread, CWinThread)

CClientThread::CClientThread()
{
}

CClientThread::~CClientThread()
{
}

BOOL CClientThread::InitInstance()
{
	m_bReceiving = 0;
	ret = 0;
	return TRUE;
}

int CClientThread::ExitInstance()
{
	closesocket(s);
	m_client->ExitInstance ();
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CClientThread, CWinThread)
	//{{AFX_MSG_MAP(CClientThread)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CClientThread message handlers

void CClientThread::StartConnect(char*  lpAddr)
{
	lpszServerAddr = lpAddr;
	m_client = AfxBeginThread((AFX_THREADPROC)CClientThread::ConnectThrd, this);

}
UINT CClientThread::ConnectThrd(void * pParam)
{
	CClientThread * pSock = (CClientThread *) pParam;

	struct	sockaddr_in addr;
	DWORD ip=inet_addr(pSock->lpszServerAddr);
	addr.sin_addr.S_un .S_addr  = ip;
	addr.sin_port = htons(10025);
	addr.sin_family = AF_INET;
	pSock->s = socket(AF_INET,SOCK_STREAM,0);
	
	pSock->ret = connect(pSock->s,(SOCKADDR*)&addr,sizeof(addr));
	if(pSock->ret == SOCKET_ERROR)
	{
		AfxMessageBox("connect失败");
		
	}
	pSock->m_bReceiving = 1;
	pSock->ReceivingLoop ();
	return 1;
	//if(ret!=1)
	//	AfxMessageBox("send出错");
	

}

void CClientThread::GoLeft()
{
	char *buf= "L";
	
	ret  = send(s,buf,1,0);

}

void CClientThread::GoRight()
{
	char *buf= "R";
	
	ret  = send(s,buf,1,0);

}

void CClientThread::Start()
{
	char *buf= "B";
	
	ret  = send(s,buf,1,0);

}

void CClientThread::ReceivingLoop()
{
	CString str;
	char buff[1];
	while(m_bReceiving)
	{
		ret = recv(s,buff,1,0);
		if(ret == 0||ret == SOCKET_ERROR)
		{
			//AfxMessageBox("recv出错");
			continue;
		}
		switch(buff[0])
		{
		case GAME_BEGIN:
			{
				p_CDBallGameDlg->BeginGame ();
				break;
			}
		case GAME_END:
			{
				p_CDBallGameDlg->Reset ();
				break;
			}
		case GO_LEFT:
			{
				p_CDBallGameDlg->Bar_Above.GoLeft ();
				p_CDBallGameDlg->p_Ball->SetBarPos (p_CDBallGameDlg->Bar_Above.GetPos (),BAR_ABOVE);
				break;
			}
		case GO_RIGHT:
			{
				p_CDBallGameDlg->Bar_Above .GoRight ();
				p_CDBallGameDlg->p_Ball->SetBarPos (p_CDBallGameDlg->Bar_Above.GetPos (),BAR_ABOVE);
				break;
			}
		}
		//str.Format ("%c",buff[0]);
		//AfxMessageBox(str);
	}

}
void CClientThread::Exchange (CDBallGameDlg* p)
{
	p_CDBallGameDlg = p;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -