76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * TcpServer_test.cpp
 | |
|  *
 | |
|  * @build   make evpp
 | |
|  * @server  bin/TcpServer_test 1234
 | |
|  * @client  bin/TcpClient_test 1234
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #include <iostream>
 | |
| 
 | |
| #include "TcpServer.h"
 | |
| 
 | |
| using namespace hv;
 | |
| 
 | |
| #define TEST_TLS        0
 | |
| 
 | |
| int main(int argc, char* argv[]) {
 | |
|     if (argc < 2) {
 | |
|         printf("Usage: %s port\n", argv[0]);
 | |
|         return -10;
 | |
|     }
 | |
|     int port = atoi(argv[1]);
 | |
| 
 | |
|     hlog_set_level(LOG_LEVEL_DEBUG);
 | |
| 
 | |
|     TcpServer srv;
 | |
|     int listenfd = srv.createsocket(port);
 | |
|     if (listenfd < 0) {
 | |
|         return -20;
 | |
|     }
 | |
|     printf("server listen on port %d, listenfd=%d ...\n", port, listenfd);
 | |
|     srv.onConnection = [](const SocketChannelPtr& channel) {
 | |
|         std::string peeraddr = channel->peeraddr();
 | |
|         if (channel->isConnected()) {
 | |
|             printf("%s connected! connfd=%d id=%d tid=%ld\n", peeraddr.c_str(), channel->fd(), channel->id(), currentThreadEventLoop->tid());
 | |
|         } else {
 | |
|             printf("%s disconnected! connfd=%d id=%d tid=%ld\n", peeraddr.c_str(), channel->fd(), channel->id(), currentThreadEventLoop->tid());
 | |
|         }
 | |
|     };
 | |
|     srv.onMessage = [](const SocketChannelPtr& channel, Buffer* buf) {
 | |
|         // echo
 | |
|         printf("< %.*s\n", (int)buf->size(), (char*)buf->data());
 | |
|         channel->write(buf);
 | |
|     };
 | |
|     srv.setThreadNum(4);
 | |
|     srv.setLoadBalance(LB_LeastConnections);
 | |
| 
 | |
| #if TEST_TLS
 | |
|     hssl_ctx_opt_t ssl_opt;
 | |
|     memset(&ssl_opt, 0, sizeof(hssl_ctx_opt_t));
 | |
|     ssl_opt.crt_file = "cert/server.crt";
 | |
|     ssl_opt.key_file = "cert/server.key";
 | |
|     ssl_opt.verify_peer = 0;
 | |
|     srv.withTLS(&ssl_opt);
 | |
| #endif
 | |
| 
 | |
|     srv.start();
 | |
| 
 | |
|     std::string str;
 | |
|     while (std::getline(std::cin, str)) {
 | |
|         if (str == "close") {
 | |
|             srv.closesocket();
 | |
|         } else if (str == "start") {
 | |
|             srv.start();
 | |
|         } else if (str == "stop") {
 | |
|             srv.stop();
 | |
|             break;
 | |
|         } else {
 | |
|             srv.broadcast(str.data(), str.size());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | 
