示例#1
0
文件: main.cpp 项目: Stuwang/fly
void test_net() {
	// Signal_ignore<SIGPIPE> __;
	Signal::signal(SIGPIPE, []() {
		LOG_INFO << "SIGPIPE OCCR";
	});
	ThreadInit _init;

	EventLoop service;

	assert(service.IsInLoop());


	LOG_INFO << "test time " << LocalClock::Now().ToString() ;
	LOG_INFO << "test time " << LocalClock::ToDay().ToString() ;

	NetAddr addr(8060);
	Accepter accepter(&service, addr, false);
	accepter.setNewConnectionCallBack([&service](int sockfd,
	const NetAddr & a) {
		LOG_INFO << "socket " << sockfd << " New Connection ,address "
		         << a.IpPort();
		TcpConPtr ptr( new TcpConnection(&service, sockfd));
		ptr->ReadCallBack([](const TcpConPtr & conn) {
			auto &buf = *( conn->readBuffer() );
			int len = buf.ReadAbleBytes();
			std::string str(buf.data(), len);
			buf.retireRead(len);
			LOG_INFO << " read " << len ;//<< " msg:" << str;
			conn->Send(str);
		});

		ptr->closeCallBack([](const TcpConPtr & conn) {
			if (conn.use_count() == 1) {
				LOG_INFO << "close And debug----";
			} else {
				LOG_INFO << "just erase";
			}
			auto &m = Conns();
			auto i =  std::find(m.begin(), m.end(), conn);
			if (i != m.end()) {
				m.erase(i);
			}
			LOG_INFO << "close TcpConnection from server";
		});

		ptr->Start();
		Conns().push_back(ptr);
	});
	LOG_INFO << fmt("%p", (void*)&service);
	accepter.listen();

	Signal::signal(SIGINT, [&]() {
		auto & ts = Conns();
		for (auto &i : ts) {
			i->forceClose();
		}
		ts.clear();
		service.quit();
	});

	service.Loop();
	LOG_DEBUG << "out of loop";
};