载入中...
搜索中...
未找到
TcpSocket.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "NetTypes.h"
6
7#include <cstdint>
8#include <memory>
9#include <mutex>
10#include <string>
11#include <vector>
12
13namespace eve::data {
14class ByteData;
15}
16
17namespace Poco::Net {
18class StreamSocket;
19class ServerSocket;
20}
21
22namespace eve::network {
23
24class Network;
25
31public:
33 explicit TcpSocket(Network* net);
35 ~TcpSocket();
36 // Class-level dllexport instantiates every member; `accepted_` is a container
37 // of unique_ptr, so the implicit copy assignment would be a hard C2280.
38 TcpSocket(const TcpSocket&) = delete;
39 TcpSocket& operator=(const TcpSocket&) = delete;
41 TcpSocket(TcpSocket&&) = default;
44
46 bool connect(std::string host, uint16_t port);
48 bool listen(uint16_t port);
50 TcpSocket* accept();
52 bool send(eve::data::ByteData* data);
54 bool sendString(std::string s);
56 void close();
58 bool isConnected() const;
60 std::string getPeer() const;
62 uint16_t getLocalPort() const;
63
65 Network* network() const { return net_; }
67 void setConnectedSocket(std::unique_ptr<Poco::Net::StreamSocket> sock);
69 Poco::Net::StreamSocket* stream();
71 Poco::Net::ServerSocket* server();
73 bool isListening() const { return listening_; }
75 bool takeAccepted(std::unique_ptr<TcpSocket>& out);
77 void pushAccepted(std::unique_ptr<TcpSocket> sock);
79 size_t pendingSendBytes() const;
80
82 bool queueSend(const void* d, size_t n);
84 void flushSend();
86 void clearPendingSend();
87
88private:
89 Network* net_ = nullptr;
90 std::unique_ptr<Poco::Net::StreamSocket> stream_;
91 std::unique_ptr<Poco::Net::ServerSocket> server_;
92 bool listening_ = false;
93 bool connected_ = false;
94 std::mutex acceptMu_;
95 std::vector<std::unique_ptr<TcpSocket>> accepted_;
96 std::string peer_;
97
98 mutable std::mutex sendMu_;
99 std::vector<char> pendingSend_;
100};
101
102} // namespace eve::network
const std::string & s
#define EVENGINE_API_PLATFORM
Definition Export.h:107
glm::vec3 n
Definition Grass.cpp:63
float d
UIHostHandle host
In-memory byte buffer implementing eve::Data (ref-counted).
Definition ByteData.h:13
Network module: TCP/UDP/HTTP factories, background worker, and completion event plumbing....
Definition Network.h:35
TCP socket backed by Poco::Net; supports both client (connect) and server (listen/accept) roles....
Definition TcpSocket.h:30
TcpSocket(const TcpSocket &)=delete
Network * network() const
Internal: owning module (used by Network::pump / NetWorker).
Definition TcpSocket.h:65
TcpSocket & operator=(TcpSocket &&)=default
Operator =.
TcpSocket & operator=(const TcpSocket &)=delete
bool isListening() const
True after listen().
Definition TcpSocket.h:73
TcpSocket(TcpSocket &&)=default
Tcp socket.