@@ -77,46 +77,20 @@ enum class websocket_message_type
77
77
pong
78
78
};
79
79
80
- namespace details
81
- {
82
- class _websocket_message
83
- {
84
- public:
85
-
86
- void set_msg_type (websocket_message_type msg_type) { m_msg_type = msg_type; }
87
-
88
- void set_length (size_t len) { m_length = len; }
89
-
90
- size_t length () const { return m_length; }
91
-
92
- websocket_message_type message_type () const { return m_msg_type; }
93
-
94
- private:
95
-
96
- websocket_message_type m_msg_type;
97
- size_t m_length;
98
- };
99
- }
100
-
101
80
// / <summary>
102
81
// / Represents an outgoing websocket message
103
82
// / </summary>
104
83
class websocket_outgoing_message
105
84
{
106
85
public:
107
86
108
- // / <summary>
109
- // / Creates an initially empty message for sending.
110
- // / </summary>
111
- websocket_outgoing_message () : _m_impl(std::make_shared<details::_websocket_message>()) {}
112
-
113
87
// / <summary>
114
88
// / Sets a UTF-8 message as the message body.
115
89
// / </summary>
116
90
// / <param name="data">UTF-8 String containing body of the message.</param>
117
91
void set_utf8_message (std::string &&data)
118
92
{
119
- this ->_set_message ( std::move (data), websocket_message_type::text_message );
93
+ this ->set_message (concurrency::streams::container_buffer< std::string>( std:: move (data)) );
120
94
}
121
95
122
96
// / <summary>
@@ -125,7 +99,7 @@ class websocket_outgoing_message
125
99
// / <param name="data">UTF-8 String containing body of the message.</param>
126
100
void set_utf8_message (const std::string &data)
127
101
{
128
- this ->_set_message (data, websocket_message_type::text_message );
102
+ this ->set_message (concurrency::streams::container_buffer<std::string>(data) );
129
103
}
130
104
131
105
// / <summary>
@@ -135,7 +109,7 @@ class websocket_outgoing_message
135
109
// / <remarks>Upon sending, the entire stream may be buffered to determine the length.</remarks>
136
110
void set_utf8_message (const concurrency::streams::istream &istream)
137
111
{
138
- this ->_set_message (istream, SIZE_MAX, websocket_message_type::text_message);
112
+ this ->set_message (istream, SIZE_MAX, websocket_message_type::text_message);
139
113
}
140
114
141
115
// / <summary>
@@ -145,7 +119,7 @@ class websocket_outgoing_message
145
119
// / <param name="len">number of bytes to send.</param>
146
120
void set_utf8_message (const concurrency::streams::istream &istream, size_t len)
147
121
{
148
- this ->_set_message (istream, len, websocket_message_type::text_message);
122
+ this ->set_message (istream, len, websocket_message_type::text_message);
149
123
}
150
124
151
125
// / <summary>
@@ -155,7 +129,7 @@ class websocket_outgoing_message
155
129
// / <param name="len">number of bytes to send.</param>
156
130
void set_binary_message (const concurrency::streams::istream &istream, size_t len)
157
131
{
158
- this ->_set_message (istream, len, websocket_message_type::binary_message);
132
+ this ->set_message (istream, len, websocket_message_type::binary_message);
159
133
}
160
134
161
135
// / <summary>
@@ -165,17 +139,17 @@ class websocket_outgoing_message
165
139
// / <remarks>Upon sending, the entire stream may be buffered to determine the length.</remarks>
166
140
void set_binary_message (const concurrency::streams::istream &istream)
167
141
{
168
- this ->_set_message (istream, SIZE_MAX, websocket_message_type::binary_message);
142
+ this ->set_message (istream, SIZE_MAX, websocket_message_type::binary_message);
169
143
}
170
144
171
145
private:
172
146
friend class details ::winrt_client;
173
147
friend class details ::wspp_client;
174
148
175
- std::shared_ptr<details::_websocket_message> _m_impl;
176
-
177
149
pplx::task_completion_event<void > m_body_sent;
178
150
concurrency::streams::streambuf<uint8_t > m_body;
151
+ websocket_message_type m_msg_type;
152
+ size_t m_length;
179
153
180
154
void signal_body_sent () const
181
155
{
@@ -189,24 +163,17 @@ class websocket_outgoing_message
189
163
190
164
const pplx::task_completion_event<void > & body_sent () const { return m_body_sent; }
191
165
192
- void _set_message ( std::string &&data, websocket_message_type msg_type )
166
+ void set_message ( const concurrency::streams::container_buffer< std::string> &buffer )
193
167
{
194
- _m_impl-> set_msg_type (msg_type) ;
195
- _m_impl-> set_length (data. length ());
196
- m_body = concurrency::streams::container_buffer<std::string>( std::move (data)) ;
168
+ m_msg_type = websocket_message_type::text_message ;
169
+ m_length = static_cast < size_t >(buffer. size ());
170
+ m_body = buffer ;
197
171
}
198
172
199
- void _set_message (const std::string &data , websocket_message_type msg_type)
173
+ void set_message (const concurrency::streams::istream &istream, size_t len , websocket_message_type msg_type)
200
174
{
201
- _m_impl->set_msg_type (msg_type);
202
- _m_impl->set_length (data.length ());
203
- m_body = concurrency::streams::container_buffer<std::string>(data);
204
- }
205
-
206
- void _set_message (const concurrency::streams::istream &istream, size_t len, websocket_message_type msg_type)
207
- {
208
- _m_impl->set_msg_type (msg_type);
209
- _m_impl->set_length (len);
175
+ m_msg_type = msg_type;
176
+ m_length = len;
210
177
m_body = istream.streambuf ();
211
178
}
212
179
};
@@ -217,9 +184,6 @@ class websocket_outgoing_message
217
184
class websocket_incoming_message
218
185
{
219
186
public:
220
- websocket_incoming_message () : _m_impl(std::make_shared<details::_websocket_message>())
221
- {
222
- }
223
187
224
188
// / <summary>
225
189
// / Extracts the body of the incoming message as a string value, only if the message type is UTF-8.
@@ -250,7 +214,7 @@ class websocket_incoming_message
250
214
// / </summary>
251
215
size_t length () const
252
216
{
253
- return _m_impl-> length ( );
217
+ return static_cast < size_t >(m_body. size () );
254
218
}
255
219
256
220
// / <summary>
@@ -259,7 +223,7 @@ class websocket_incoming_message
259
223
CASABLANCA_DEPRECATED (" Incorrectly spelled API, use message_type() instead." )
260
224
websocket_message_type messge_type () const
261
225
{
262
- return _m_impl-> message_type () ;
226
+ return m_msg_type ;
263
227
}
264
228
265
229
// / <summary>
@@ -268,7 +232,7 @@ class websocket_incoming_message
268
232
// / <returns>websocket_message_type</returns>
269
233
websocket_message_type message_type () const
270
234
{
271
- return _m_impl-> message_type () ;
235
+ return m_msg_type ;
272
236
}
273
237
274
238
private:
@@ -281,8 +245,7 @@ class websocket_incoming_message
281
245
// Store message body in a container buffer backed by a string.
282
246
// Allows for optimization in the string message cases.
283
247
concurrency::streams::container_buffer<std::string> m_body;
284
-
285
- std::shared_ptr<details::_websocket_message> _m_impl;
248
+ websocket_message_type m_msg_type;
286
249
};
287
250
288
251
}}}
0 commit comments