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

📄 gobangdeal.cpp

📁 java程序五子棋源代码。 java程序五子棋源代码。
💻 CPP
📖 第 1 页 / 共 5 页
字号:

/************************************************************************
函数功能:退出房间

************************************************************************/
void GobangDeal::ToExitRoom(TDBPEx *dbp,NODE_STRUCT recvnode){ 
	char sqlbuf[1024]={0};
	char *tempstr;
	char *body;
	CString tableid,tableseq,status;
	CString nickname,picture,usertype;
	CString userid,roomnum,userinfo="";
	body = recvnode.body;
	tempstr=split(body,SUBDIVISION);
	userid = tempstr;
	tempstr=split(body,SUBDIVISION);
	roomnum = tempstr;
	//更新用户的socket连接和用户状态
	sprintf( sqlbuf, "update gobang_userinfo set status='01',queuenum=%d,ipaddress='%s',\
			connectport=%d  where userid='%s'",recvnode.queuenum,recvnode.clientip,\
			recvnode.clientport,userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
	//从大厅信息表中删除用户信息
	sprintf( sqlbuf, "delete from gobang_hallinfo where userid='%s'",userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
	
	//响应信息:(0:成功 1:失败)
	sprintf( recvnode.body, "%s;", "0");
	this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
	this->WriteLog("body:%s",recvnode.body);
	if(recvnode.queuenum < 0) { //玩家为机器人
		svr_robot_queue->Insert(&recvnode);
	}else{
		svr_send_queue->Insert(&recvnode);
	}
	RadioRoomInfo(dbp,roomnum,"503");
	
}


/************************************************************************
函数功能:广播房间列表改变的信息

************************************************************************/
void GobangDeal::RadioRoomInfo(TDBPEx *dbp,CString roomnum,CString operateid){ 
	char sqlbuf[1024]={0};
	NODE_STRUCT recvnode;
	short int queuenum;
	ULONG connectport;
	CString ipaddress,usernum;
	CString userid,roominfo="";
	memset(&recvnode,0,sizeof recvnode);
	strcpy(recvnode.err_code,"000");
	strcpy(recvnode.service_id,"001");
	strcpy(recvnode.operate_id,operateid);
	//更新房间在线用户数
	if(strcmp(operateid,"502")==0){
		sprintf( sqlbuf, "update Gobang_roominfo set usernum = usernum+1 where roomid='%s'",roomnum);
	}
	else if(strcmp(operateid,"503")==0){
		sprintf( sqlbuf, "update Gobang_roominfo set usernum = usernum-1 where roomid='%s'",roomnum);
	}
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
	//获取房间里的在线用户数	
	sprintf( sqlbuf, "select usernum from Gobang_roominfo where roomid = '%s'",roomnum);
	dbp->SQLExecDirect(sqlbuf,FALSE);
	if(dbp->SQLFetch() == PBL_Error_OK)
	{
		dbp->SQLGetDataStr(1,usernum);
		sprintf( recvnode.body, "%s;%s;",roomnum, usernum);
	}
	else
	{
		sprintf( recvnode.body, "%s;%s;",roomnum, 0);
	}
	dbp->SQLFreeStmt();
	//获取所有处在房间列表界面的用户
	sprintf( sqlbuf, "select queuenum,ipaddress,connectport from Gobang_userinfo where status = '01'",roomnum);
	dbp->SQLExecDirect(sqlbuf,FALSE);
	while(dbp->SQLFetch() == PBL_Error_OK)
	{
		dbp->SQLGetDataSInt(1,queuenum);
		dbp->SQLGetDataStr(2,ipaddress);
		dbp->SQLGetDataUInt(3,connectport);
		recvnode.queuenum=queuenum;
		recvnode.clientport = connectport;
		strcpy(recvnode.clientip,ipaddress);
		this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
		this->WriteLog("body:%s",recvnode.body);
		if(recvnode.queuenum < 0) { //玩家为机器人
			svr_robot_queue->Insert(&recvnode);
		}else{
			svr_send_queue->Insert(&recvnode);
		}
	}
	dbp->SQLFreeStmt();
	
}


/************************************************************************
函数功能:用户坐下

************************************************************************/
void GobangDeal::UserSit(TDBPEx *dbp,NODE_STRUCT recvnode){ 
	char sqlbuf[1024]={0};
	char *tempstr;
	char *body;
	short queuenum;
	ULONG connectport;
	CString tableid,tableseq,status;
	CString nickname,picture,usertype,ipaddress;
	CString userid,roomnum,userinfo="";
	CString integral,gamelevel,Allcount,wincount;
	CString equalcount,failcount;
	CString oppuserid,sex,age,gamemoney;
	body = recvnode.body;
	tempstr=split(body,SUBDIVISION);
	userid = tempstr;
	tempstr=split(body,SUBDIVISION);
	roomnum = tempstr;
	tempstr=split(body,SUBDIVISION);
	tableid = tempstr;
	tempstr=split(body,SUBDIVISION);
	tableseq = tempstr;

	//更新用户的socket连接
	sprintf( sqlbuf, "update gobang_userinfo set status='01',queuenum=%d,ipaddress='%s',\
			connectport=%d  where userid='%s'",recvnode.queuenum,recvnode.clientip,\
			recvnode.clientport,userid);
	dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
	//判断是否有用户捷足先登了
	sprintf( sqlbuf, 
		"select userid from Gobang_hallinfo where userid<>'%s' and tableseq = '%s' \
		and tableid = '%s' and roomid = '%s'",userid,tableseq,tableid,roomnum
		);
	dbp->SQLExecDirect(sqlbuf,FALSE);
	if(dbp->SQLFetch() == PBL_Error_OK)  //已有用户先坐下
	{
		dbp->SQLGetDataStr(1,userid);
		dbp->SQLFreeStmt();
		//响应信息:是否坐下(0:成功 1:失败)
		sprintf( recvnode.body, "%s;", "1");
		this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
		this->WriteLog("body:%s",recvnode.body);
		if(recvnode.queuenum < 0) { //玩家为机器人
			svr_robot_queue->Insert(&recvnode);
		}else{
			svr_send_queue->Insert(&recvnode);
		}
		//获取已经坐下的用户的信息
		sprintf( sqlbuf, 
			"select a.status,b.nickname,b.sex,b.age,b.gamemoney,b.picture,b.usertype\
			 from Gobang_hallinfo a, User_info b where  b.userid = a.userid and b.userid = '%s'"
			,userid);
		dbp->SQLExecDirect(sqlbuf,FALSE);
		if(dbp->SQLFetch() == PBL_Error_OK)
		{
			dbp->SQLGetDataStr(1,status);
			dbp->SQLGetDataStr(2,nickname);
			dbp->SQLGetDataStr(3,sex);
			dbp->SQLGetDataStr(4,age);
			dbp->SQLGetDataStr(5,gamemoney);
			dbp->SQLGetDataStr(6,picture);
			dbp->SQLGetDataStr(7,usertype);
			userinfo = userid+";"+nickname+";"+picture+";"+sex+";"+age
					+";"+gamemoney+";"+status+";"+usertype+";";
		}
		dbp->SQLFreeStmt();
		userinfo =  userid+";"+nickname+";"+picture+";"+usertype+";"+status+";"+tableid+";"+tableseq;
		strcpy(recvnode.body,userinfo);
		strcpy(recvnode.operate_id,"514");
		this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
		this->WriteLog("body:%s",recvnode.body);
		if(recvnode.queuenum < 0) { //玩家为机器人
			svr_robot_queue->Insert(&recvnode);
		}else{
			svr_send_queue->Insert(&recvnode);
		}
	}
	else     //还没人先坐下
	{
		dbp->SQLFreeStmt();
		//更改用户信息表
		sprintf( sqlbuf, "update gobang_userinfo set status ='03',tableid ='%s',tableseq='%s' \
			where userid='%s'", tableid,tableseq,userid
		   );
		dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
		//更改大厅信息表
		sprintf( sqlbuf, "update Gobang_hallinfo set status ='01',tableid ='%s',tableseq='%s' \
			where userid='%s'",tableid,tableseq,userid);
		dbp->SQLExecDirect(sqlbuf,TRUE,TRUE);
		
		//获取对手的信息
		sprintf( sqlbuf, 
			"select a.userid,a.status,b.nickname,b.sex,b.age,b.gamemoney,b.picture,b.usertype\
			 from Gobang_hallinfo a, User_info b where  b.userid = a.userid and a.status <> '00' and a.userid<>'%s' \
			 and roomid = '%s' and tableid='%s'",userid,roomnum,tableid);
		dbp->SQLExecDirect(sqlbuf,FALSE);
		if(dbp->SQLFetch() == PBL_Error_OK)
		{
			dbp->SQLGetDataStr(1,oppuserid);
			dbp->SQLGetDataStr(2,status);
			dbp->SQLGetDataStr(3,nickname);
			dbp->SQLGetDataStr(4,sex);
			dbp->SQLGetDataStr(5,age);
			dbp->SQLGetDataStr(6,gamemoney);
			dbp->SQLGetDataStr(7,picture);
			dbp->SQLGetDataStr(8,usertype);
			userinfo = oppuserid+";"+nickname+";"+picture+";"+sex+";"+age
					+";"+gamemoney+";"+status+";"+usertype+";";
			dbp->SQLFreeStmt();

			//获取对手的游戏统计
			sprintf( sqlbuf, 
				"select a.integral,b.gamelevel,a.Allcount,a.wincount,a.equalcount,a.failcount,\
				a.queuenum,a.connectport,a.ipaddress from gobang_userinfo a, gobang_level b where  \
				b.integral =(select max(c.integral) from gobang_level c  \
				where a.integral >= c.integral) and a.userid ='%s'",oppuserid);
			dbp->SQLExecDirect(sqlbuf,FALSE);
			if(dbp->SQLFetch() == PBL_Error_OK)
			{
				dbp->SQLGetDataStr(1,integral);
				dbp->SQLGetDataStr(2,gamelevel);
				dbp->SQLGetDataStr(3,Allcount);
				dbp->SQLGetDataStr(4,wincount);
				dbp->SQLGetDataStr(5,equalcount);
				dbp->SQLGetDataStr(6,failcount);
				dbp->SQLGetDataSInt(7,queuenum);
				dbp->SQLGetDataUInt(8,connectport);
				dbp->SQLGetDataStr(9,ipaddress);
				userinfo =userinfo+integral+"$"+gamelevel+"$"+Allcount+"$"+wincount+"$"+failcount+"$"+equalcount;
			
			}
			dbp->SQLFreeStmt();
			//响应信息:是否成功(0:成功 1:失败)
			sprintf( recvnode.body, "%s;%s;", "0", userinfo);
			this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
			this->WriteLog("body:%s",recvnode.body);
			if(recvnode.queuenum < 0) { //玩家为机器人
				svr_robot_queue->Insert(&recvnode);
			}else{
				svr_send_queue->Insert(&recvnode);
			}

			//将自己的信息传给对手
			strcpy(recvnode.operate_id,"504");
			recvnode.queuenum=queuenum;
			recvnode.clientport = connectport;
			strcpy(recvnode.clientip,ipaddress);
			//获取用户的信息
			sprintf( sqlbuf, 
				"select a.status,b.nickname,b.sex,b.age,b.gamemoney,b.picture,b.usertype \
				 from Gobang_hallinfo a, User_info b where  b.userid = a.userid and b.userid = '%s'"
				,userid);
			dbp->SQLExecDirect(sqlbuf,FALSE);
			if(dbp->SQLFetch() == PBL_Error_OK)
			{
				dbp->SQLGetDataStr(1,status);
				dbp->SQLGetDataStr(2,nickname);
				dbp->SQLGetDataStr(3,sex);
				dbp->SQLGetDataStr(4,age);
				dbp->SQLGetDataStr(5,gamemoney);
				dbp->SQLGetDataStr(6,picture);
				dbp->SQLGetDataStr(7,usertype);
				userinfo = userid+";"+nickname+";"+picture+";"+sex+";"+age
						+";"+gamemoney+";"+status+";"+usertype+";";
			}
			dbp->SQLFreeStmt();

			//获取用户的游戏统计
			sprintf( sqlbuf, 
				"select a.integral,b.gamelevel,a.Allcount,a.wincount,a.equalcount,\
				a.failcount,a.queuenum from gobang_userinfo a, gobang_level b \
				where b.integral =(select max(c.integral)  from gobang_level c  \
				where a.integral >= c.integral) and a.userid ='%s'",userid);
			dbp->SQLExecDirect(sqlbuf,FALSE);
			if(dbp->SQLFetch() == PBL_Error_OK)
			{
				dbp->SQLGetDataStr(1,integral);
				dbp->SQLGetDataStr(2,gamelevel);
				dbp->SQLGetDataStr(3,Allcount);
				dbp->SQLGetDataStr(4,wincount);
				dbp->SQLGetDataStr(5,equalcount);
				dbp->SQLGetDataStr(6,failcount);
				dbp->SQLGetDataSInt(7,queuenum);
				userinfo =userinfo+integral+"$"+gamelevel+"$"+Allcount+"$"+wincount+"$"+failcount+"$"+equalcount;
			}
			dbp->SQLFreeStmt();
			//响应信息:是否成功(0:成功 1:失败)
			sprintf( recvnode.body, "%s", userinfo);
			this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
			this->WriteLog("body:%s",recvnode.body);
			if(recvnode.queuenum < 0) { //玩家为机器人
				svr_robot_queue->Insert(&recvnode);
			}else{
				svr_send_queue->Insert(&recvnode);
			}
		}
		else{
				sprintf( recvnode.body, "%s;", "0");
				this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
				this->WriteLog("body:%s",recvnode.body);
				if(recvnode.queuenum < 0) { //玩家为机器人
					svr_robot_queue->Insert(&recvnode);
				}else{
					svr_send_queue->Insert(&recvnode);
				}
		}
		//给其他同房间用户发送信息
		strcpy(recvnode.operate_id,"514");
			//获取用户的信息
			sprintf( sqlbuf, 
				"select a.status,b.nickname,b.sex,b.age,b.gamemoney,b.picture,b.usertype\
				 from Gobang_hallinfo a, User_info b where  b.userid = a.userid and b.userid = '%s'"
				,userid);
			dbp->SQLExecDirect(sqlbuf,FALSE);
			if(dbp->SQLFetch() == PBL_Error_OK)
			{
				dbp->SQLGetDataStr(1,status);
				dbp->SQLGetDataStr(2,nickname);
				dbp->SQLGetDataStr(3,sex);
				dbp->SQLGetDataStr(4,age);
				dbp->SQLGetDataStr(5,gamemoney);
				dbp->SQLGetDataStr(6,picture);
				dbp->SQLGetDataStr(7,usertype);
				userinfo = userid+";"+nickname+";"+picture+";"+sex+";"+age
						+";"+gamemoney+";"+status+";"+usertype+";";
			}
			dbp->SQLFreeStmt();
		userinfo =  userid+";"+nickname+";"+picture+";"+usertype+";"+status+";"+tableid+";"+tableseq;
		//获取所有在房间里的用户
		strcpy(recvnode.body,userinfo);
		sprintf( sqlbuf, "select queuenum,ipaddress,connectport from Gobang_userinfo where roomid = '%s' \
			and tableid <> '%s'",roomnum,tableid);
			dbp->SQLExecDirect(sqlbuf,FALSE);
			while(dbp->SQLFetch() == PBL_Error_OK)
			{
				dbp->SQLGetDataSInt(1,queuenum);
				dbp->SQLGetDataStr(2,ipaddress);
				dbp->SQLGetDataUInt(3,connectport);
				recvnode.queuenum=queuenum;
				recvnode.clientport = connectport;
				strcpy(recvnode.clientip,ipaddress);
				this->WriteLog("operateid:%s,%s",recvnode.clientip,recvnode.operate_id);
				this->WriteLog("body:%s",recvnode.body);
				if(recvnode.queuenum < 0) { //玩家为机器人
					svr_robot_queue->Insert(&recvnode);
				}else{
					svr_send_queue->Insert(&recvnode);
				}
			}
			dbp->SQLFreeStmt();
	}
}



/************************************************************************

⌨️ 快捷键说明

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