]> git.sesse.net Git - casparcg/commitdiff
2.1.0: osc/server
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 9 Mar 2012 15:26:38 +0000 (15:26 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 9 Mar 2012 15:26:38 +0000 (15:26 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2563 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

protocol/osc/server.cpp

index 50bfd3bc375f46b7957e24c606f93a26f803e6a1..9f520701c104a41f147ec46f66526dc35e36a8c7 100644 (file)
@@ -94,11 +94,12 @@ public:
        {\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
@@ -107,10 +108,10 @@ public:
                        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
@@ -119,6 +120,7 @@ private:
                : 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
@@ -192,14 +194,31 @@ public:
        }\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