LogSystem beta 1.4
This is a logging system project
 
载入中...
搜索中...
未找到
server.hpp
浏览该文件的文档.
1
3#pragma once
4#include "Socket.hpp"
5#include "threadpool.hpp"
6#include "nocopy.hpp"
7#include <iostream>
8#include <functional>
9
10namespace XuServer
11{
13 using CallBack = std::function<std::string(std::vector<char> &, bool *error_code)>;
14
15 class TcpServer;
19 {
20 public:
24 ThreadData(TcpServer *tcp_this, TcpSocket *sockp)
25 : _this(tcp_this), _sockp(sockp) {}
26
27 public:
30 };
31
34 class TcpServer : public nocopy
35 {
36 public:
41 TcpServer(uint16_t port, CallBack call_back, int thread_count = 5)
42 : _port(port), _listen_socket(new TcpSocket()),
43 _call_back(call_back), _thread_pool(std::make_unique<threadpool>(thread_count))
44 {
46 }
48 static void *ThreadRun(void *args)
49 {
50 std::vector<char> in_buf_stream(1024 * 10 + sizeof(uint32_t));
51 ThreadData *td = static_cast<ThreadData *>(args);
52 while (true)
53 {
54 bool ok = true;
55 if (!td->_sockp->Recv(&in_buf_stream))
56 break;
57
58 std::string send_string = td->_this->_call_back(in_buf_stream, &ok);
59 if (ok)
60 if (!send_string.empty())
61 {
62 std::vector<char> sd(send_string.begin(), send_string.end());
63 td->_sockp->Send(sd);
64 }
65 else
66 break;
67 }
68 td->_sockp->CloseSockFd();
69 delete td->_sockp;
70 delete td;
71 return nullptr;
72 }
74 void Loop()
75 {
76 while (true)
77 {
78 std::string peer_ip;
79 uint16_t peer_port;
80 TcpSocket *newsock = _listen_socket->AcceptConnection(&peer_ip, &peer_port);
81 if (newsock == nullptr)
82 continue;
83 // std::cout << "get a new connection,sockfd:" << newsock->GetSockFd() << "client info:" << peer_ip << ":" << peer_port << std::endl;
84 ThreadData *td = new ThreadData(this, newsock);
85 _thread_pool->push(ThreadRun, td);
86 }
87 }
88
89 private:
90 int _port;
92 std::unique_ptr<threadpool> _thread_pool;
93
94 public:
96 };
97}
封装TCP和UDPSocket
TCP服务器
Definition server.hpp:35
TcpSocket * _listen_socket
监听socket
Definition server.hpp:91
int _port
端口号
Definition server.hpp:90
void Loop()
启动监听
Definition server.hpp:74
CallBack _call_back
回调函数
Definition server.hpp:95
TcpServer(uint16_t port, CallBack call_back, int thread_count=5)
构造函数
Definition server.hpp:41
static void * ThreadRun(void *args)
启动线程
Definition server.hpp:48
std::unique_ptr< threadpool > _thread_pool
线程池
Definition server.hpp:92
TCPSocket类
Definition Socket.hpp:122
bool Recv(std::vector< char > *buffer, int size=1024 *10)
接收来自对端的数据。
Definition Socket.hpp:171
void Send(const std::vector< char > &send_data)
向对端发送数据。
Definition Socket.hpp:196
void BuildListenSocketMethod(uint16_t port, int backlog=DEFAULT_BACKLOG)
创建、绑定并监听Socket。
Definition Socket.hpp:133
void CloseSockFd()
关闭当前Socket。
Definition Socket.hpp:162
TcpSocket * AcceptConnection(std::string *peerip, uint16_t *peerport)
接收新的TCP连接。
Definition Socket.hpp:206
线程信息
Definition server.hpp:19
TcpSocket * _sockp
socket指针
Definition server.hpp:29
ThreadData(TcpServer *tcp_this, TcpSocket *sockp)
构造函数
Definition server.hpp:24
TcpServer * _this
服务器指针
Definition server.hpp:28
Definition nocopy.hpp:7
线程池类
Definition threadpool.hpp:20
Definition config.hpp:9
std::function< std::string(std::vector< char > &, bool *error_code)> CallBack
服务器回调函数
Definition server.hpp:13