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

📄 common.h.svn-base

📁 sigmadesign smp8623 gui source code ,bingo
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
	str.fill('0');	return str << 1900 + local.tm_year << "-"<< std::setw(2) << local.tm_mon + 1 << "-" << std::setw(2) << local.tm_mday << " " << std::setw(2) << local.tm_hour << ":" << std::setw(2) << local.tm_min << ":" << std::setw(2) << local.tm_sec;	//str << str1.str();}inline void write_event(int type, std::ostringstream& reason){	BEGIN_DB()		std::ostringstream str;		str << "INSERT INTO ServerEventLog (TypeID, EventText, Date) VALUES("<<type<<", '"<<reason.str()<<"', '"<< get_date_time <<"')";		qr.execute(str.str().c_str());	END_DB()}inline string bool_to_str(int n){	return n == 0 ? string("FALSE") : string("TRUE");}inline int str_to_int(const char* str){	if(strcmp(str, "TRUE"))		return 0;	else		return 1;}inline void send_to_rc(std::string& ip, std::ostringstream& udp_send){	struct sockaddr_in isa;	logger(SEND, "rc %s: %s room %d\n", ip.c_str(), udp_send.str().c_str(), ctxt.rooms[ip]->room);	CRC(udp_send);	pollfd pfd;	pfd.fd = ctxt.rcsock;	pfd.events = POLLOUT;	isa.sin_family = AF_INET;	isa.sin_port = htons(ctxt.conf->rc_port);	inet_aton(ip.c_str(), &isa.sin_addr);	int ready = poll(&pfd, 1, 2000);	if(ready != -1)	{		if(pfd.revents == POLLOUT){			sendto(ctxt.rcsock, udp_send.str().c_str(), udp_send.str().length(), 0, (sockaddr *) &isa, sizeof(isa));		}	}	else	{		printf("error sending data\n");	}}inline bool is_KCWS(std::string& ip){	bool bRet = true;	std::map<string, int>::iterator i = ctxt.ks.find(ip);	if(i == ctxt.ks.end())		bRet = false;	return bRet;}inline bool send_to_mng(std::ostringstream& msg, int id){	std::map<std::string, int>::iterator i = ctxt.ks.begin();	for(; i != ctxt.ks.end(); i++)	{		std::cout<<i->second<<std::endl;		if(i->second == id)		{			break;		}	}	if(i == ctxt.ks.end())		return false;	std::cout<<i->first<<std::endl;	std::map<std::string, int>::iterator mng = ctxt.mng.find(i->first);	bool bRet = false;	if(mng != ctxt.mng.end())	{		logger(SEND, "mng: %s\n", msg.str().c_str());		msg << "\r\n";		pollfd pfd;		pfd.fd = mng->second;		pfd.events = POLLHUP;		int ready = poll(&pfd, 1, 2000);		if(ready != -1)		{			if((pfd.revents & POLLHUP) == POLLHUP){				bRet = false;				std::cout<<"fail\n";			} else {				bRet = true;				std::cout<<"success\n";				send(mng->second, msg.str().c_str(), msg.str().length(), 0);			}		}	}	std::cout<<bRet<<" bRet"<<std::endl;	return bRet;}inline int send_to_client(std::ostringstream& msg, int cfd ){	logger(SEND, "client: %s\n", msg.str().c_str());	std::ostringstream final;	final << "\2" << msg.str() << "\3\r\n";	pollfd pfd;	pfd.fd = cfd;	pfd.events = POLLOUT;	if(cfd)	{		int ready = poll(&pfd, 1, 2000);		if(ready != -1)		{			if((pfd.revents & POLLHUP) == POLLHUP){				logger(ERROR, "client connection closed");				return 0;//				break;//			}//			else if((pfd.revents & POLLOUT) == POLLOUT){//				continue;			} else {				int n = send(cfd, final.str().c_str(), final.str().length(), 0);				if(n == 0)					return n;			}		}		else{			logger(ERROR, "Error sending to client: %s", errno);			return 0;//			break;		}	}	return 1;}inline void send_to_pms(std::ostringstream& msg, int pmssock = -1){	if(pmssock == -1)		pmssock = ctxt.pmssock;	logger(SEND, "pms: %d %s\n", pmssock, msg.str().c_str());	std::ostringstream final;	final << "\2" << msg.str() << "\3";//\r\n";	pollfd pfd;	pfd.fd = pmssock;	pfd.events = POLLOUT;//	while(1)	{		int ready = poll(&pfd, 1, 2000);		if(ready != -1)		{			if((pfd.revents & POLLHUP) == POLLHUP){				logger(ERROR, "PMS connection closed");//				break;//			}//			else if((pfd.revents & POLLOUT) == POLLOUT){//				continue;			} else {				send(pmssock, final.str().c_str(), final.str().length(), 0);			}		}		else{			logger(ERROR, "Error sending to PMS: %s", errno);//			break;		}	}}inline void send_to_pms(const std::string& msg, int pmssock = -1){	if(pmssock == -1)		pmssock = ctxt.pmssock;	logger(SEND, "pms: %d %s\n", pmssock, msg.c_str());	std::ostringstream final;	final << "\2" << msg << "\3";//\r\n";	pollfd pfd;	pfd.fd = pmssock;	pfd.events = POLLOUT;//	while(1)	{		int ready = poll(&pfd, 1, 2000);		if(ready != -1)		{			if((pfd.revents & POLLHUP) == POLLHUP){				logger(ERROR, "PMS connection closed");//				break;//			}//			else if((pfd.revents & POLLOUT) == POLLOUT){//				continue;			} else {				send(pmssock, final.str().c_str(), final.str().length(), 0);			}		}		else{			logger(ERROR, "Error sending to PMS: %s", errno);//			break;		}	}}void check_out(std::string& req);inline std::string& normalize_string(std::string& str){	pcrecpp::RE("(\\')").GlobalReplace("\\'\\'", &str);	return str;}inline std::string get_rc_ip(mysqlpp::Query& qr, int RoomNo){	std::ostringstream rcs_ip;	rcs_ip << "SELECT IP_RC FROM Room WHERE RoomID=" << RoomNo;	mysqlpp::StoreQueryResult res1 = qr.store(rcs_ip.str().c_str());	return res1[0][0].c_str();}inline int get_h_type(mysqlpp::Query& qr, int RoomNo){	bool bOK = false;	int HType = 0;	if(RoomNo > 0)	{		std::string ip = get_rc_ip(qr, RoomNo);		if(ctxt.conf->using_rc)		{			pthread_mutex_lock( &ctxt.rooms[ip]->lock);			if(ctxt.rooms[ip]->status == 1)			{				bOK = true;			}			pthread_mutex_unlock( &ctxt.rooms[ip]->lock);		}		else		{			bOK = true;		}	}	if(bOK)	{		std::ostringstream type_q;		type_q << "SELECT Keycard.KHTypeID FROM ((RoomStatus LEFT  JOIN KeycardRoom ON (KeycardRoom.RoomID = RoomStatus.RoomID AND Keycard.KeyID = RoomStatus.PowerKeyID)) INNER JOIN Keycard ON Keycard.KeyID = KeycardRoom.KeyID) WHERE RoomStatus.RoomID=" << RoomNo;		mysqlpp::StoreQueryResult type_res = qr.store(type_q.str().c_str());		if(type_res.num_rows() > 0)		{			HType = type_res[0][0];		}	}	return HType;}inline std::string get_room_name(mysqlpp::Query& qr, int RoomNo){	std::ostringstream room_name_q;	room_name_q << "SELECT RoomName FROM Room WHERE RoomID =" << RoomNo;	mysqlpp::StoreQueryResult room_name_res = qr.store(room_name_q.str().c_str());	std::string sRoomName;	if(room_name_res.num_rows() > 0)	{		sRoomName = room_name_res[0][0].c_str();	}	return sRoomName;}/** * password is in admno */inline std::string gen_inet(int Amount, int RoomNo, int Official, const std::string& Reason, int EmpID){	char admno[8]={0,};	BEGIN_DB()		std::ostringstream inet_time_q;		inet_time_q << "SELECT InetTime, Price FROM Internet WHERE InetType=" << Amount;		mysqlpp::StoreQueryResult inet_time_res = qr.store(inet_time_q.str().c_str());		int net_time = inet_time_res[0][0];		int price = 0;		if(Official == 0)			price = (int) inet_time_res[0][1];		srand(time(NULL));		int i = rand();		std::ostringstream s;		s << i;		char *c = crypt("MT", &s.str().c_str()[2]);		memcpy(admno, &c[1], 7);		admno[7] = '\0';		TRANSACTION_BEGIN(*conn)			std::ostringstream inet_pay_q;			inet_pay_q << "INSERT INTO InternetPay(RoomID, InetType, PayDate, User, Pwd, IsCronStarted, InetTime, Price, IsActive) VALUES ("<<RoomNo<<", "<< Amount <<", '"<< get_date_time <<"', 'room" << RoomNo <<"', '"<<admno<<"', 'FALSE', "<<net_time<<", "<<price<<", 'TRUE')";			qr.execute(inet_pay_q.str().c_str());			if(Official == 1)			{				std::ostringstream official_log;				official_log << "INSERT INTO OfficialOperationLog (ObjectID, OperationID, RoomID, Date, EmpID, Allowed, OperationDate, Reason ) VALUES("<< Amount << ",2,"<< RoomNo << ",'" << get_date_time << "'," << EmpID << ",'TRUE','"<< get_date_time <<"','"<< Reason << "')";			}		TRANSACTION_END()	END_DB()	logger(INFO, "gen_inet: pass %s RoomNo %d\n", admno, RoomNo);	return admno;}inline void make_gen(int RoomNo, int Amount, int PostingType, int cfd, const std::string& SenderName, int Official, const std::string& Reason, int EmpID){	if(RoomNo == 0)		return;	BEGIN_DB()		std::string ip;		int HType = 1;		if(SenderName == "PHP")			HType = get_h_type(qr, RoomNo);		if(HType == 1 || ctxt.conf->using_cards == 0)		{			if(ctxt.conf->using_pms && Official == 0)			{				if(PostingType == 0)				{					if(ctxt.is_in_php(RoomNo))					{						ctxt.insert_php(cfd, RoomNo, PostingType, Amount);						std::string sRoomName = get_room_name(qr, RoomNo);						std::ostringstream pms_message;						pms_message << "PS|RN" << sRoomName<<"|PTC|TA"<< Amount <<"|DA"<< get_date << "|TI"<< get_time <<"|";						if(ctxt.conf->second_interface)							send_to_pms(pms_message, ctxt.pmssock2);						else							send_to_pms(pms_message);					}				}				else				{					std::ostringstream internet;					internet << "SELECT Price FROM Internet WHERE InetType=" << Amount;					mysqlpp::StoreQueryResult internet_res = qr.store(internet.str().c_str());					int price = 0;					if(internet_res.num_rows() > 0)					{						price = (int)internet_res[0][0];						price /= 100;					}					if(ctxt.is_in_php(RoomNo))					{						ctxt.insert_php(cfd, RoomNo, PostingType, Amount);						std::string sRoomName = get_room_name(qr, RoomNo);						std::ostringstream pms_message;						pms_message << "PS|RN" << sRoomName<<"|PTC|TA"<< price <<"|DA"<< get_date << "|TI"<< get_time <<"|";						if(ctxt.conf->second_interface)							send_to_pms(pms_message, ctxt.pmssock2);						else							send_to_pms(pms_message);					}				}			}			else			{				if(PostingType == 0)				{					std::ostringstream message;					message << "PA|RN" << RoomNo << "|ASOK|\r\n";					send(cfd, message.str().c_str(), message.str().length(), 0);				}				else				{					std::string admno = gen_inet(Amount, RoomNo, Official, Reason, EmpID);					/*std::ostringstream inet_time_q;					inet_time_q << "SELECT InetTime, Price FROM Internet WHERE InetType=" << Amount;					mysqlpp::StoreQueryResult inet_time_res = qr.store(inet_time_q.str().c_str());					int net_time = inet_time_res[0][0];					int price = 0;					if(Official == 0)						price = (int) inet_time_res[0][1];					srand(time(NULL));					int i = rand();					std::ostringstream s;					s << i;					char *c = crypt("MT", &s.str().c_str()[2]);					char admno[7];					memcpy(admno, &c[1], 7);					TRANSACTION_BEGIN(conn)						std::ostringstream inet_pay_q;						inet_pay_q << "INSERT INTO InternetPay(RoomID, InetType, PayDate, User, Pwd, IsCronStarted, InetTime, Price, IsActive) VALUES ("<<RoomNo<<", "<< Amount <<", '"<< get_date_time <<"', 'room" << RoomNo <<"', '"<<admno<<"', 'FALSE', "<<net_time<<", "<<price<<", 'TRUE')";						qr.execute(inet_pay_q.str().c_str());						if(Official == 1)						{							std::ostringstream official_log;							official_log << "INSERT INTO OfficialOperationLog (ObjectID, OperationID, RoomID, Date, EmpID, Allowed, OperationDate, Reason ) VALUES("<< Amount << ",2,"<< RoomNo << ",'" << get_date_time << "'," << EmpID << ",'TRUE','"<< get_date_time <<"','"<< Reason << "')";						}					TRANSACTION_END()*/					if(!admno.empty())					{						std::ostringstream message;						message << "PA|RN" << RoomNo << "|NMroom" << RoomNo <<"|PD"<<admno<<"|ASOK|\r\n";						send(cfd, message.str().c_str(), message.str().length(), 0);					}					else					{						std::ostringstream message;						message << "PA|RN" << RoomNo << "|NM|PD|ASNO|\r\n";						send(cfd, message.str().c_str(), message.str().length(), 0);					}				}			}		}	END_DB()}inline int get_season(mysqlpp::Query &qr){	mysqlpp::StoreQueryResult res_seson = qr.store("SELECT Season FROM SystemInfo");	return (int)res_seson[0][0];}inline void process_command(std::string& req){	std::ostringstream command;	command << "perl srv_parse.pl \""<< req <<"\" &";	system(command.str().c_str());}void server_accept(void* msg);void* server( int& sock, int port, std::string& ip,			  void (*message_loop)(void*),			  void (*accept_loop)(void*) = server_accept,			  void (context_t::*save_handle)(std::string&, int) = NULL,			  void (context_t::*del_handle)(std::string&) = NULL );#endif //__COMMON_H

⌨️ 快捷键说明

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