]> git.seodisparate.com - UDPConnection/commitdiff
Fixes and improvements
authorStephen Seo <seo.disparate@gmail.com>
Fri, 20 Sep 2019 07:59:16 +0000 (16:59 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 20 Sep 2019 07:59:16 +0000 (16:59 +0900)
Fix use of accept-connections flag.
Fix use of TSQueue (add top_and_pop_and_rsize fn).
Reduce sleep time of threadedUpdate to 8 ms.

cpp_impl/src/TSQueue.hpp
cpp_impl/src/UDPC_Defines.hpp
cpp_impl/src/UDPConnection.cpp

index 714788feb8cbfece65cd1467e0c7925a9a80ebe9..2352cf868c785af4066a8d0899568ef3f0bb0b4c 100644 (file)
@@ -27,6 +27,7 @@ class TSQueue {
     std::optional<T> top();
     bool pop();
     std::optional<T> top_and_pop();
+    std::optional<T> top_and_pop_and_rsize(unsigned int *rsize);
     void clear();
     /*
      * status ==
@@ -117,6 +118,20 @@ std::optional<T> TSQueue<T>::top_and_pop() {
     return value;
 }
 
+template <typename T>
+std::optional<T> TSQueue<T>::top_and_pop_and_rsize(unsigned int *rsize) {
+    std::lock_guard<std::mutex> lock(mutex);
+    std::optional<T> value = std::nullopt;
+    if(!rb.empty()) {
+        value = rb.top();
+        rb.pop();
+    }
+    if(rsize) {
+        *rsize = rb.getSize();
+    }
+    return value;
+}
+
 template <typename T>
 void TSQueue<T>::clear() {
     std::lock_guard<std::mutex> lock(mutex);
index 63e0c157de456a011703a9df48b3126a9d78edaa..ce038d772f2190260aec720e92e4126720ef32f0 100644 (file)
@@ -237,7 +237,6 @@ public:
     /*
      * 0 - is threaded
      * 1 - is client
-     * 2 - is accepting new connections
      */
     std::bitset<32> flags;
     std::atomic_bool isAcceptNewConnections;
index 5af6ea83d940e9165d0be151c011872ed7ccccff..f8b1c400c59881b74c9fd77650522a64fa3035ed 100644 (file)
@@ -169,7 +169,6 @@ mutex()
     } else {
         flags.reset(0);
     }
-    flags.set(2);
 
     rng_engine.seed(std::chrono::system_clock::now().time_since_epoch().count());
 
@@ -611,7 +610,7 @@ void UDPC::Context::update_impl() {
 
     UDPC_ConnectionId identifier{receivedData.sin6_addr, receivedData.sin6_scope_id, ntohs(receivedData.sin6_port)};
 
-    if(isConnect && flags.test(2)) {
+    if(isConnect && isAcceptNewConnections.load()) {
         // is connect packet and is accepting new connections
         if(!flags.test(1)
                 && conMap.find(identifier) == conMap.end()) {
@@ -936,7 +935,7 @@ void UDPC::threadedUpdate(Context *ctx) {
         ctx->update_impl();
         ctx->mutex.unlock();
         nextNow = std::chrono::steady_clock::now();
-        std::this_thread::sleep_for(std::chrono::milliseconds(11) - (nextNow - now));
+        std::this_thread::sleep_for(std::chrono::milliseconds(8) - (nextNow - now));
     }
 }
 
@@ -1279,10 +1278,7 @@ UDPC_PacketInfo UDPC_get_received(UDPC_HContext ctx, unsigned int *remaining) {
         return UDPC::get_empty_pinfo();
     }
 
-    auto opt_pinfo = c->receivedPkts.top_and_pop();
-    if(remaining) {
-        *remaining = c->receivedPkts.size();
-    }
+    auto opt_pinfo = c->receivedPkts.top_and_pop_and_rsize(remaining);
     if(opt_pinfo) {
         return *opt_pinfo;
     }