| 136 | } |
| 137 | |
| 138 | void do_write() |
| 139 | { |
| 140 | auto self(shared_from_this()); |
| 141 | boost::asio::async_write(socket_, |
| 142 | boost::asio::buffer(write_msgs_.front().data(), |
| 143 | write_msgs_.front().length()), |
| 144 | [this, self](boost::system::error_code ec, std::size_t /*length*/) |
| 145 | { |
| 146 | if (!ec) |
| 147 | { |
| 148 | write_msgs_.pop_front(); |
| 149 | if (!write_msgs_.empty()) |
| 150 | { |
| 151 | do_write(); |
| 152 | } |
| 153 | } |
| 154 | else |
| 155 | { |
| 156 | room_.leave(shared_from_this()); |
| 157 | } |
| 158 | }); |
| 159 | } |
| 160 | |
| 161 | tcp::socket socket_; |
| 162 | chat_room& room_; |