MCPcopy Create free account
hub / github.com/chronoxor/CppServer / EchoClient

Class EchoClient

performance/ws_echo_client.cpp:32–90  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30std::atomic<uint64_t> total_messages(0);
31
32class EchoClient : public WSClient
33{
34public:
35 EchoClient(const std::shared_ptr<Service>& service, const std::string& address, int port, int messages)
36 : WSClient(service, address, port),
37 _messages(messages)
38 {
39 }
40
41 void SendMessage() { SendBinaryAsync(message_to_send.data(), message_to_send.size()); }
42
43protected:
44 void onWSConnecting(CppServer::HTTP::HTTPRequest& request) override
45 {
46 request.SetBegin("GET", "/");
47 request.SetHeader("Host", "localhost");
48 request.SetHeader("Origin", "http://localhost");
49 request.SetHeader("Upgrade", "websocket");
50 request.SetHeader("Connection", "Upgrade");
51 request.SetHeader("Sec-WebSocket-Key", CppCommon::Encoding::Base64Encode(ws_nonce()));
52 request.SetHeader("Sec-WebSocket-Protocol", "chat, superchat");
53 request.SetHeader("Sec-WebSocket-Version", "13");
54 }
55
56 void onWSConnected(const CppServer::HTTP::HTTPResponse& response) override
57 {
58 for (size_t i = _messages; i > 0; --i)
59 SendMessage();
60 }
61
62 void onWSReceived(const void* buffer, size_t size) override
63 {
64 _received += size;
65 while (_received >= message_to_send.size())
66 {
67 SendMessage();
68 _received -= message_to_send.size();
69 }
70
71 timestamp_stop = Timestamp::nano();
72 total_bytes += size;
73 }
74
75 void onSent(size_t sent, size_t pending) override
76 {
77 _sent += sent;
78 }
79
80 void onError(int error, const std::string& category, const std::string& message) override
81 {
82 std::cout << "WebSocket client caught an error with code " << error << " and category '" << category << "': " << message << std::endl;
83 ++total_errors;
84 }
85
86private:
87 size_t _sent{0};
88 size_t _received{0};
89 size_t _messages{0};

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected