58 #pragma comment (lib, "Ws2_32.lib")
62 #include <condition_variable>
74 #include "tcp_data_message.pb.h"
76 namespace tcp_io_device {
103 max_elements_ = max_elements;
115 std::lock_guard<std::recursive_mutex> lock(mutex_);
116 while (queue_.size() >= max_elements_) {
117 if (queue_.front()->messagetype() == TCPMessage_Type_DATA) {
118 queue_.front()->release_datamessage();
122 queue_.push(std::move(t));
132 std::lock_guard<std::recursive_mutex> lock(mutex_);
133 if (queue_.empty()) {
136 std::unique_ptr<TCPMessage> val = std::move(queue_.front());
145 std::lock_guard<std::recursive_mutex> lock(mutex_);
146 while (queue_.size() > 0) {
147 if (queue_.front()->messagetype() == TCPMessage_Type_DATA) {
148 queue_.front()->release_datamessage();
157 std::queue<std::unique_ptr<TCPMessage>> queue_;
158 mutable std::recursive_mutex mutex_;
171 static std::map<int, std::string> type_to_name_map_;
179 TCPConnection(std::shared_ptr<SafeQueue> receive_queue, std::shared_ptr<SafeQueue> send_queue, uint64_t msg_length_buf_size);
238 SocketType socket_type_;
240 std::shared_ptr<std::thread> tcp_background_thread_;
244 SOCKET server_listen_socket_;
247 int server_listen_socket_;
250 uint64_t msg_buf_size_;
251 uint64_t msg_length_buf_size_;
253 std::shared_ptr<SafeQueue> incoming_queue_;
254 std::shared_ptr<SafeQueue> outgoing_queue_;