Beispiel #1
0
int NetLib::clientStart(ServerNode* stub,script::tixmlCodeNode * node)
{
	if (!stub || !node) return 0;
	int id = 0;
	std::string ip = node->getAttr("ip");
	WORD port = 0;
	node->getAttr("id",id);
	const char *name = node->getAttr("name");
	node->getAttr("port",port);
	std::string type = node->getAttr("type");
	if (id == 0)
	{
		if (type == "local")
		{
			ClientNode * client = theClient.addLocalClient(name);
			if (client)
			{
				client->useLocal();
			}
			return 1;
		}
		ClientNode * client = theClient.addRemoteClient(name);
		if (client)
		{
			if (!client->connect(ip.c_str(),port))
			{
				//client->useLocal();
				client->getSocket()->setInvalid();
				printf("服务器连接失败 %s:%u \n",ip.c_str(),port);
				return 0;
			}
			else
			{
				stTestCmd testCmd;
				cmd::Stream ss = testCmd.toStream();
				client->getSocket()->sendPacket(ss.content(),ss.size());
				printf("服务器连接成功<%s:%u>\n",ip.c_str(),port);
				return 1;
			}
		}
		else
		{
			printf("该类型的连接不存在:%d\n",id);
		}
	}
	return 0;
}
Beispiel #2
0
ClientNode * ClientManager::addRemoteClient(const char *name)
{
	for (CLIENTS_ITER iter = _clients.begin(); iter != _clients.end();++iter)
	{
		ClientNode *client = *iter;
		if (client && client->name == name)
		{
			return client;
		}
	}
	ClientNode *client = new ClientNode();
	client->name = name;
	client->getSocket()->setHandle(::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP));
	_clients.push_back(client);
	if (this->pool)
		this->pool->addSocket(client->getSocket());
	return client;
}
Beispiel #3
0
/**
 * 处理连接的释放
 * \param socket 连接对象
 */
void DealClose::handleClose(Socket *socket)
{
	ENTER_FUNCTION
	_mutex.lock();
	ClientNode * client = theClient.addRemoteClient("request");
	if (client)
	{
		if (socket == client->getSocket())
		{
			printf("xxx");
		}
	}
	_mutex.unlock();
}
void BrokerSendTask::run(){
	Event* ev = NULL;
	MQTTMessage* srcMsg = NULL;
	ClientNode* clnode = NULL;

	uint8_t buffer[SOCKET_MAXBUFFER_LENGTH];

	string host = BROKER_HOST_NAME;

	int port = BROKER_PORT;

	if(_res->getArgc() > ARGV_BROKER_ADDR){
		host = _res->getArgv()[ARGV_BROKER_ADDR];
	}
	if(_res->getArgc() > ARGV_BROKER_PORT){
		port = atoi(_res->getArgv()[ARGV_BROKER_PORT]);
	}

	while(true){

		uint16_t length = 0;
		memset(buffer, 0, SOCKET_MAXBUFFER_LENGTH);

		ev = _res->getBrokerSendQue()->wait();

		clnode = ev->getClientNode();
		srcMsg = clnode->getBrokerSendMessage();

		if(srcMsg->getType() == MQTT_TYPE_PUBLISH){
			MQTTPublish* msg = static_cast<MQTTPublish*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s PUBLISH      --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_PUBACK){
			MQTTPubAck* msg = static_cast<MQTTPubAck*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s PUBACK       --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_PINGREQ){
			MQTTPingReq* msg = static_cast<MQTTPingReq*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s PINGREQ      --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_SUBSCRIBE){
			MQTTSubscribe* msg = static_cast<MQTTSubscribe*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s SUBSCRIBE    --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_UNSUBSCRIBE){
			MQTTUnsubscribe* msg = static_cast<MQTTUnsubscribe*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s UNSUBSCRIBE  --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_CONNECT){
			MQTTConnect* msg = static_cast<MQTTConnect*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s CONNECT      --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}
		else if(srcMsg->getType() == MQTT_TYPE_DISCONNECT){
			MQTTDisconnect* msg = static_cast<MQTTDisconnect*>(srcMsg);
			length = msg->serialize(buffer);
			D_MQTT("%s DISCONNECT   --->    Broker    %s\n", currentDateTime(), msgPrint(buffer,msg));
		}

		int rc = 0;

		if(length > 0){
			if( clnode->getSocket()->isValid()){
				rc = clnode->getSocket()->send(buffer, length);
				if(rc == -1){
					clnode->getSocket()->disconnect();
					D_MQTT("       Socket is valid. but can't send Client:%s\n", clnode->getNodeId()->c_str());
				}
			}else{
				if(clnode->getSocket()->create()){
					if(clnode->getSocket()->connect(host, port)){
						rc = clnode->getSocket()->send(buffer, length);
						if(rc == -1){
							clnode->getSocket()->disconnect();
							D_MQTT("       Socket is created. but can't send, Client:%s\n", clnode->getNodeId()->c_str());
						}
					}else{
						D_MQTT("%s Can't connect socket Client:%s\n",
								currentDateTime(), clnode->getNodeId()->c_str());
					}
				}else{
					D_MQTT("%s Can't create socket Client:%s\n",
						currentDateTime(), clnode->getNodeId()->c_str());
				}
			}
		}
		delete ev;
	}
}