From 9d7bd89ebdfe68fcfa8eaa614551347151be1221 Mon Sep 17 00:00:00 2001
From: Jason Wang <wangr1@ornl.gov>
Date: Fri, 3 Mar 2017 15:31:04 -0500
Subject: [PATCH] changed DataMan engine to send arbitrary parameters to
 DataMan library

---
 src/engine/dataman/DataManReader.cpp | 41 +++++++++++++--------------
 src/engine/dataman/DataManWriter.cpp | 42 +++++++++++++---------------
 2 files changed, 38 insertions(+), 45 deletions(-)

diff --git a/src/engine/dataman/DataManReader.cpp b/src/engine/dataman/DataManReader.cpp
index 0f5a5c044..2704088d6 100644
--- a/src/engine/dataman/DataManReader.cpp
+++ b/src/engine/dataman/DataManReader.cpp
@@ -143,30 +143,27 @@ void DataManReader::Init( )
             }
         };
 
-        std::string method_type, method, local_ip, remote_ip; //no need to initialize to empty (it's default)
-        int local_port=0, remote_port=0, num_channels=0;
-
-        lf_AssignString( "method_type", method_type );
-        if( method_type == "stream" )
+        auto is_number = [] (const std::string& s)
         {
-            lf_AssignString( "method", method );
-            lf_AssignString( "local_ip", local_ip );
-            lf_AssignString( "remote_ip", remote_ip );
-            lf_AssignInt( "local_port", local_port );
-            lf_AssignInt( "remote_port", remote_port );
-            lf_AssignInt( "num_channels", num_channels );
-
-            json jmsg;
-            jmsg["method"] = method;
-            jmsg["local_ip"] = local_ip;
-            jmsg["remote_ip"] = remote_ip;
-            jmsg["local_port"] = local_port;
-            jmsg["remote_port"] = remote_port;
-            jmsg["num_channels"] = num_channels;
-            jmsg["stream_mode"] = "receiver";
-
-            m_Man.add_stream(jmsg);
+            return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) { return !std::isdigit(c);  }) == s.end();
+        };
+
+        json jmsg;
+        for(auto &i : m_Method.m_Parameters){
+            if( is_number(i.second) ){
+                jmsg[i.first] = std::stoi(i.second);
+            }
+            else{
+                jmsg[i.first] = i.second;
+            }
         }
+        jmsg["stream_mode"] = "receiver";
+        m_Man.add_stream(jmsg);
+
+        std::string method_type;
+        int num_channels=0;
+        lf_AssignString( "method_type", method_type );
+        lf_AssignInt( "num_channels", num_channels );
     }
     else
     {
diff --git a/src/engine/dataman/DataManWriter.cpp b/src/engine/dataman/DataManWriter.cpp
index 87c54aa74..7f06b75c7 100644
--- a/src/engine/dataman/DataManWriter.cpp
+++ b/src/engine/dataman/DataManWriter.cpp
@@ -198,37 +198,33 @@ void DataManWriter::Init( )
             }
         };
 
-        std::string method_type, method, local_ip, remote_ip; //no need to initialize to empty (it's default)
-        int local_port=0, remote_port=0, num_channels=0;
-
-        lf_AssignString( "method_type", method_type );
-        if( method_type == "stream" )
+        auto is_number = [] (const std::string& s)
         {
-            lf_AssignString( "method", method );
-            lf_AssignString( "local_ip", local_ip );
-            lf_AssignString( "remote_ip", remote_ip );
-            lf_AssignInt( "local_port", local_port );
-            lf_AssignInt( "remote_port", remote_port );
-            lf_AssignInt( "num_channels", num_channels );
-
-            json jmsg;
-            jmsg["method"] = method;
-            jmsg["local_ip"] = local_ip;
-            jmsg["remote_ip"] = remote_ip;
-            jmsg["local_port"] = local_port;
-            jmsg["remote_port"] = remote_port;
-            jmsg["num_channels"] = num_channels;
-            jmsg["stream_mode"] = "sender";
-
-            m_Man.add_stream(jmsg);
+            return !s.empty() && std::find_if(s.begin(), s.end(), [](char c) { return !std::isdigit(c);  }) == s.end();
+        };
+
+        json jmsg;
+        for(auto &i : m_Method.m_Parameters){
+            if( is_number(i.second) ){
+                jmsg[i.first] = std::stoi(i.second);
+            }
+            else{
+                jmsg[i.first] = i.second;
+            }
         }
+        jmsg["stream_mode"] = "sender";
+        m_Man.add_stream(jmsg);
+
+        std::string method_type;
+        int num_channels=0;
+        lf_AssignString( "method_type", method_type );
+        lf_AssignInt( "num_channels", num_channels );
     }
     else
     {
         InitCapsules( );
         InitTransports( );
     }
-
 }
 
 void DataManWriter::InitCapsules( )
-- 
GitLab