{\r
connection_set_->erase(shared_from_this());\r
socket_->close();\r
+ CASPAR_LOG(info) << print() << L" Disconnected.";\r
}\r
\r
std::wstring print() const\r
{\r
- return L"[" + (socket_->is_open() ? u16(socket_->remote_endpoint().address().to_string()) : L"n/a") + L"]";\r
+ return L"osc[" + (socket_->is_open() ? u16(socket_->local_endpoint().address().to_string() + ":" + boost::lexical_cast<std::string>(socket_->local_endpoint().port())) : L"no-address") + L"]";\r
}\r
\r
void on_next(const monitor::event& e)\r
return; \r
\r
auto data_ptr = spl::make_shared<std::vector<char>>(write_osc_event(e));\r
- auto size = data_ptr->size();\r
+ int32_t size = static_cast<int32_t>(data_ptr->size());\r
char* size_ptr = reinterpret_cast<char*>(&size);\r
\r
- data_ptr->insert(std::begin(*data_ptr), size_ptr, size_ptr + sizeof(int32_t));\r
+ data_ptr->insert(data_ptr->begin(), size_ptr, size_ptr + sizeof(int32_t));\r
socket_->async_write_some(boost::asio::buffer(*data_ptr), std::bind(&connection::handle_write, shared_from_this(), data_ptr, std::placeholders::_1, std::placeholders::_2)); \r
}\r
\r
: socket_(std::move(socket))\r
, connection_set_(std::move(connection_set))\r
{\r
+ CASPAR_LOG(info) << print() << L" Connected.";\r
}\r
\r
void handle_read(const boost::system::error_code& error, size_t bytes_transferred) \r
}\r
\r
~tcp_observer()\r
- { \r
- acceptor_.close();\r
+ { \r
+ try\r
+ {\r
+ acceptor_.close();\r
\r
- service_.post([=]\r
+ service_.post([=]\r
+ {\r
+ auto connections = *connection_set_;\r
+ BOOST_FOREACH(auto& connection, connections)\r
+ {\r
+ try\r
+ {\r
+ connection->stop();\r
+ }\r
+ catch(...)\r
+ {\r
+ CASPAR_LOG_CURRENT_EXCEPTION();\r
+ }\r
+ }\r
+ });\r
+ }\r
+ catch(...)\r
{\r
- BOOST_FOREACH(auto& connection, *connection_set_)\r
- connection->stop();\r
- });\r
+ CASPAR_LOG_CURRENT_EXCEPTION();\r
+ }\r
\r
thread_.join();\r
}\r