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;
							 | 
						||
| 
								 | 
							
								}
							 |