Add sound manager initial source code
[staging/soundmanager.git] / libsoundmanager / test.cpp
diff --git a/libsoundmanager/test.cpp b/libsoundmanager/test.cpp
new file mode 100644 (file)
index 0000000..aa3f51e
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <libsoundmanager/libsoundmanager.hpp>
+#include <iostream>
+#include <glib-2.0/glib.h>
+#include <fcntl.h>
+#include <string>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <thread>
+#include <exception>
+#include <vector>
+#include <sstream>
+
+using namespace std;
+
+static vector<string> split(const string& str, char sep);
+LibSoundmanager* sm;
+
+static void usage()
+{
+    cout << "verb "<< "key:arg" << endl;
+       cout << "example:" << endl; 
+       cout << "connect sourceID 100 sinkID 100" << endl;
+       cout << "------- -------- --- " << endl;
+       cout << "  verb    key    value" << endl;
+       cout << "verb list:" << endl;
+       for(auto itr = api_list.begin(); itr != api_list.end(); ++itr)
+       {
+               cout << "  " << *itr << endl;
+       }
+       // Todo output api list
+       exit(0);
+}
+
+static void call_test()
+{
+       string command;
+
+       cout << "input verb and argments" << endl;
+
+       /* read the buffer */
+       for(;;){
+               char line[1023];
+               cin.getline(line, sizeof(line));
+               command = line;
+               if(command.empty()){
+                       continue;
+               }
+               
+               vector<string> v_command = split(command, ' ');
+               /*for(auto itr = v_command.begin(); itr != v_command.end(); ++itr)
+               {
+                       cout << *itr <<endl;
+               }*/
+               size_t num = v_command.size();
+               if(num % 2 == 0){
+                       cout << "If command contains args, please input <key,value> in argument part" << endl;
+                       continue;
+               }
+               /* create json object */
+               struct json_object* j_obj = json_object_new_object();
+               for(int i = 1;i < (v_command.size()) ;++i){
+                       struct json_object* val         = json_object_new_string(v_command[i+1].c_str());
+                       json_object_object_add(j_obj, v_command[i].c_str(), val);
+                       ++i;
+               }
+               /* call verb via libsoundmanager */
+               sm->call(v_command[0], j_obj);
+               /* free vector */
+               vector<string>().swap(v_command);
+               string().swap(command);
+       }
+}
+
+static void onRep(struct json_object* reply_contents)
+{
+    const char* str = json_object_to_json_string(reply_contents);
+    cout << "[CB onRep]: " << str << endl;
+    json_object_put(reply_contents);
+}
+
+static void onEv(const string& event, struct json_object* event_contents)
+{
+    const char* str = json_object_to_json_string(event_contents);
+    cout << "[CB onEvent]: event" << event.c_str() << "  contents:" << str << endl;
+    json_object_put(event_contents);
+}
+
+static vector<string> split(const string& str, char sep)
+{
+    vector<string> v;
+    stringstream ss(str);
+    string buffer;
+    while( getline(ss, buffer, sep) ) {
+               if(!buffer.empty())
+               v.push_back(buffer);
+    }
+    return v;
+}
+
+int main(int argc, char **argv)
+{
+       int ret;
+       if(argc == 1)
+       {
+               printf("Please input port num in first argument, and token in second argument");
+               usage();
+               return 0;
+       }
+       if(argc == 2)
+       {
+               string av(argv[1]);
+               if( (av == "-h") || (av == "--help"))
+               {
+                       usage();
+                       return 0;
+               }       
+       }
+
+       string port_string(argv[1]);
+       string token(argv[2]);
+       char* endptr;
+       long port = strtol(port_string.c_str(),&endptr,10);
+
+    /* error check of range */
+    if( (port > 20000) || (port < 0) )
+    {
+               printf("input under 20000(temporary number)");
+        return 0;
+    }
+    if(*endptr != '\0')
+    {
+               printf("not number");
+        return 0;
+    }
+       
+    cout << "Call test for libsoundmanager" << endl;
+       cout << "Call example: registerSource appname radio" << endl;
+       sm = new LibSoundmanager(port, token);  
+       sm->register_callback(&onEv, &onRep);
+
+       if (ret < 0) {
+               printf("failed to create event loop");
+               return -1;
+       }
+       sm->run_eventloop();
+       call_test();
+
+       return 0;
+}
\ No newline at end of file