changed architecture in Search.cpp 16/81316/1
authorSang gun Lee <sanggun7.lee@samsung.com>
Mon, 25 Jul 2016 11:09:49 +0000 (20:09 +0900)
committerSang gun Lee <sanggun7.lee@samsung.com>
Mon, 25 Jul 2016 11:09:49 +0000 (20:09 +0900)
There were two service list in Search.cpp and SearchProvider.cpp.
discarded one of the list.

Change-Id: I85eee854889ea688d67087140b63a6dd8f8433ee
Signed-off-by: Sang gun Lee <sanggun7.lee@samsung.com>
msf_tizen_client/include/MSFDSearchProvider.h
msf_tizen_client/include/Search.h
msf_tizen_client/include/SearchProvider.h
msf_tizen_client/src/Channel.cpp
msf_tizen_client/src/MSFDSearchProvider.cpp
msf_tizen_client/src/Search.cpp
msf_tizen_client/src/SearchProvider.cpp
msf_tizen_client/src/mDNSSearchProvider.cpp

index 851e370..b661316 100644 (file)
@@ -59,7 +59,7 @@ public:
        void processReceivedMsg(char *, int);
        static SearchProvider create();
        static SearchProvider create(Search *);
-       void json_parse(const char *in);
+       bool json_parse(const char *in, int length);
        static void foreach_json_object(JsonObject *object, const gchar *key, JsonNode *node, gpointer user_data);
 };
 
index 2ae5b04..5479796 100644 (file)
@@ -69,14 +69,13 @@ public:
        virtual void onLost(Service);
 };
 
-class Search:public SearchListener
+class Search
 {
 private :
        static int SERVICE_CHECK_TIMEOUT;
        static Search *instance;
        list<SearchProvider> providers ;
        list<SearchProvider> removedProviders ;
-       static list<Service> services;
 
        static int numRunning;
        SearchListener *searchListener;
@@ -85,10 +84,11 @@ private :
        static int search_ref_count;
        static bool stopping;
        bool searching_now;
-       static mDNSSearchProvider provider1;
-       static MSFDSearchProvider provider2;
+       static mDNSSearchProvider provider_mdns;
+       static MSFDSearchProvider provider_msfd;
 
 public:
+       static list<Service> services;
        static bool pt_update_start;
        static pthread_t threads[NUM_OF_THREADS];
        static int onStartNotified;
@@ -100,27 +100,17 @@ public:
        bool stop();
 
        static list<Search*> search_list;
-       void onStart();
-       void onStop();
-       void onFound(Service);
-       void onLost(Service);
-       static void st_onStart();
-       static void st_onStop();
-       static void st_onFound(Service);
-       static void st_onLost(Service);
-
-       bool isEqualto(SearchProvider, SearchProvider);
-       list<Service> getServices();
-       bool remove(list<SearchProvider> *, SearchProvider);
-       void addProvider(SearchProvider);
-       //bool removeProvider(SearchProvider);
-       //void processRemovedProviders();
-       //void removeAllProviders();
+       static void onStart();
+       static void onStop();
+       static void onFound(Service);
+       static void onLost(Service);
+
+       static list<Service> getServices();
        void startDiscovery();
        void stopDiscovery();
        static bool addService(Service);
        static bool removeService(Service);
-       void removeAndNotify(Service);
+       static void removeServiceAndNotify(Service);
        void validateService(Service);
        Service getServiceById(string id);
 
index d511722..ef50144 100644 (file)
@@ -53,7 +53,7 @@ class SearchProvider
 {
 private:
        Search *searchListener;
-       static list<Service> services;
+       //static list<Service> services;
 
 public:
        SearchProvider();
@@ -61,11 +61,9 @@ public:
        virtual ~SearchProvider(){}
        virtual void start() {}
        virtual bool stop() { return true; }
-       static list<Service> getServices();
+       //static list<Service> getServices();
        bool isSearching();
-       void setSearchListener(Search *obj);
        std::string getIP(std::string url);
-       void addService(Service service);
        void push_in_alivemap(long ttl, string id , int service_type);
        void updateAlive(long ttl, string id , int service_type);
        static void reapServices();
@@ -73,8 +71,6 @@ public:
 protected:
        bool searching;
        void setServices(list<Service>);
-       static void removeService(Service service);
-       static void removeServiceAndNotify(Service service);
        void clearServices();
        Service getServiceById(string id);
        static Service getServiceByIp(string ip);
index 41e4fc6..4357b99 100755 (executable)
@@ -1273,7 +1273,7 @@ void Channel::create_websocket(void *att) {
                        }
                }
 
-               n = lws_service(Context, -1);
+               n = lws_service(Context, 1500);
 
                if (n < 0)
                        break;
index e2c7edf..6683e18 100755 (executable)
@@ -26,6 +26,7 @@
 #include "Error.h"
 #include "Result.h"
 #include "Channel.h"
+#include "Search.h"
 #define MSGBUFSIZE 1000
 #define MULTICAST_PORT 8001
 #define MULTICAST_GROUP "224.0.0.7"
@@ -54,11 +55,11 @@ class ResultMSFDServiceCallback : public Result_Base
                string ip_id;
                int provider_type;
 
-               void onSuccess(Service abc)
+               void onSuccess(Service svc)
                {
                        MSF_DBG("MSFD Service Callback onSucces()");
                        MSFDSearchProvider_pointer->push_in_alivemap(ttl, ip_id, provider_type);
-                       MSFDSearchProvider_pointer->addService(abc);
+                       Search::addService(svc);
                }
 
                void onError(Error)
@@ -178,7 +179,15 @@ void MSFDSearchProvider::processReceivedMsg(char *buf, int buflen)
        if (buf == NULL)
                return;
 
-       json_parse(buf);
+       if (buflen < 10) {
+               return;
+       }
+
+       MSF_DBG("buf = %s", buf);
+
+       if (!json_parse(buf, buflen)) {
+               return;
+       }
 
        string ip;
        int port = 0;
@@ -208,7 +217,7 @@ void MSFDSearchProvider::processReceivedMsg(char *buf, int buflen)
                Service serv =  getServiceById(id);
 
                if (serv.getId().length() != 0) {
-                       removeServiceAndNotify(serv);
+                       Search::removeServiceAndNotify(serv);
                }
        }
 }
@@ -239,20 +248,32 @@ void MSFDSearchProvider::foreach_json_object(JsonObject *object, const gchar *ke
        }
 }
 
-void MSFDSearchProvider::json_parse(const char *in)
+bool MSFDSearchProvider::json_parse(const char *in, int length)
 {
        JsonParser *parser = json_parser_new();
 
-       if (json_parser_load_from_data(parser, in, -1, NULL)) {
-               JsonNode *node = json_parser_get_root(parser);
+       if (json_parser_load_from_data(parser, in, length, NULL)) {
+               JsonNode *node = NULL;
+               node = json_parser_get_root(parser);
+
+               if (node == NULL) {
+                       MSF_DBG("json_parsing error");
+                       return false;
+               }
 
                if (json_node_get_node_type(node) == JSON_NODE_OBJECT) {
                        json_object_foreach_member(json_node_get_object(node), foreach_json_object, this);
+               } else {
+                       MSF_DBG("json_parsing error");
+                       return false;
                }
 
        } else {
                MSF_DBG("json_parsing error");
+               return false;
        }
+
+       return true;
 }
 
 bool MSFDSearchProvider::stop()
index e44d747..13f7735 100755 (executable)
@@ -25,8 +25,8 @@
 int Search::SERVICE_CHECK_TIMEOUT = 5000;
 bool Search::clearProviders;
 pthread_t Search::threads[NUM_OF_THREADS];
-mDNSSearchProvider Search::provider1;
-MSFDSearchProvider Search::provider2;
+mDNSSearchProvider Search::provider_mdns;
+MSFDSearchProvider Search::provider_msfd;
 Search *Search::instance = NULL;
 bool Search::starting = false;
 bool Search::stopping = false;
@@ -40,27 +40,7 @@ int Search::numRunning;
 
 void Search::onStart()
 {
-       st_onStart();
-}
-
-void Search::onStop()
-{
-       st_onStop();
-}
-
-void Search::onFound(Service service)
-{
-       st_onFound(service);
-}
-
-void Search::onLost(Service service)
-{
-       st_onLost(service);
-}
-
-void  Search :: st_onStart()
-{
-       MSF_DBG("Search::st_onStart()");
+       MSF_DBG("Search::onStart()");
 
        // ....... ==0 ??
        if (onStartNotified > 0) {
@@ -75,9 +55,9 @@ void  Search :: st_onStart()
        }
 }
 
-void  Search::st_onStop()
+void Search::onStop()
 {
-       MSF_DBG("Search::st_onStop()");
+       MSF_DBG("Search::onStop()");
        list<Search*>::iterator itr;
        for (itr = search_list.begin(); itr != search_list.end(); itr++) {
                if ((*itr)->searchListener != NULL && (*itr)->searching_now) {
@@ -86,15 +66,13 @@ void  Search::st_onStop()
        }
 }
 
-void  Search::st_onFound(Service service)
+void Search::onFound(Service service)
 {
-       MSF_DBG("Search::st_onFound()");
-
-       addService(service);
+       MSF_DBG("Search::onFound()");
 
        list<Search*>::iterator itr;
 
-       MSF_DBG("Search::st_onFound() list size = %d", search_list.size());
+       MSF_DBG("Search::onFound() list size = %d", services.size());
 
        for (itr = search_list.begin(); itr != search_list.end(); itr++) {
                if ((*itr)->searchListener != NULL && (*itr)->searching_now) {
@@ -103,11 +81,9 @@ void  Search::st_onFound(Service service)
        }
 }
 
-void  Search::st_onLost(Service service)
+void Search::onLost(Service service)
 {
-       MSF_DBG("Search::st_onLost()");
-
-       removeService(service);
+       MSF_DBG("Search::onLost()");
 
        list<Search*>::iterator itr;
 
@@ -215,56 +191,8 @@ bool Search::stop()
 
 list<Service> Search::getServices()
 {
-       return SearchProvider::getServices();
-}
-
-void Search::addProvider(SearchProvider provider)
-{
-       providers.push_back(provider);
-       provider.setSearchListener(this);
-}
-
-bool Search::isEqualto(SearchProvider s1, SearchProvider s2)
-{
-       list<Service> services1 = s1.getServices();
-       list<Service> services2 = s1.getServices();
-       int len1 = services1.size();
-       int len2 = services2.size();
-       if (len1 == len2)
-               return false;
-
-       std::list<Service>::iterator iter1;
-       std::list<Service>::iterator iter2;
-       for(iter1 = services1.begin(); iter1 != services1.end(); ++iter1) {
-               if (services2.size() != 0) {
-                       iter2 = services2.begin();
-                       while(iter2 != services2.end()) {
-                               if (((*iter2).getId()) == ((*iter1).getId())) {
-                                       services2.erase(iter2++);
-                                       break;
-                               } else {
-                                       iter2++;
-                               }
-                       }
-               }
-       }
-       if (services2.size() == 0)
-               return true;
-       else
-               return false;
-}
-
-bool Search::remove(list<SearchProvider> *providers, SearchProvider provider)
-{
-       std::list<SearchProvider>::iterator it = providers->begin();
-       while(it != providers->end()) {
-               bool match = isEqualto(*it, provider);
-               if (match) {
-                       providers->erase(it);
-                       return true;
-               }
-       }
-       return false;
+       //return SearchProvider::getServices();
+       return services;
 }
 
 void *Search::pt_startMDNS(void *arg)
@@ -274,7 +202,7 @@ void *Search::pt_startMDNS(void *arg)
 
 void *Search::pt_startMSFD(void *arg)
 {
-       provider2.start();
+       provider_msfd.start();
        return NULL;
 }
 
@@ -305,7 +233,7 @@ void Search::startDiscovery()
 
        int ret = -1;
 
-       provider1.start();
+       provider_mdns.start();
 
        ret = pthread_create(&threads[MSFD_THREAD_NUMBER], NULL, pt_startMSFD, NULL);
        if (ret == -1)
@@ -323,8 +251,8 @@ void Search::stopDiscovery()
        MSF_DBG("Search::stopDiscovery()");
        stopping = true;
        bool stop = false;
-       stop = provider1.stop();
-       stop = provider2.stop();
+       stop = provider_mdns.stop();
+       stop = provider_msfd.stop();
        pt_update_start = false;
 
        if (stop)
@@ -350,8 +278,11 @@ bool Search::addService(Service service)
                        break;
                }
        }
-       if (!match)
+       if (!match) {
                services.push_back(service);
+               onFound(service);
+       }
+
        return true;
 }
 
@@ -366,10 +297,10 @@ bool Search::removeService(Service service)
        return true;
 }
 
-void Search::removeAndNotify(Service service)
+void Search::removeServiceAndNotify(Service service)
 {
-       if (removeService(service)) {
-       }
+       removeService(service);
+       onLost(service);
 }
 
 void Search::validateService(Service service)
index 1120c6a..9323dc2 100644 (file)
@@ -20,7 +20,6 @@
 #include "SearchProvider.h"
 #include "Debug.h"
 
-list<Service> SearchProvider::services;
 map<string, ttl_info> SearchProvider::aliveMap;
 
 ttl_info::ttl_info(long ttl, int service_type):msfd_ttl(0), mdns_ttl(0)
@@ -61,6 +60,8 @@ bool ttl_info::is_expired()
 {
        long now = time(0);
 
+       MSF_DBG("msfd_remain_ttl = %d mdns_remain_ttl = %d", msfd_ttl - now, mdns_ttl - now);
+
        if (msfd_ttl < now && mdns_ttl < now)
                return true;
        else
@@ -78,10 +79,10 @@ SearchProvider::SearchProvider(Search *searchListen)
        searching = false;
 }
 
-list<Service> SearchProvider::getServices()
-{
-       return services;
-}
+//list<Service> SearchProvider::getServices()
+//{
+//     return services;
+//}
 
 void SearchProvider::setServices(list<Service> listofservices)
 {
@@ -89,73 +90,22 @@ void SearchProvider::setServices(list<Service> listofservices)
        if (listofservices.size() != 0) {
                std::list<Service>::const_iterator iterator;
                for (iterator = listofservices.begin(); iterator != listofservices.end(); ++iterator) {
-                       services.push_back(*iterator);
+                       Search::services.push_back(*iterator);
                }
        }
 }
 
-void SearchProvider::setSearchListener(Search *obj)
-{
-       searchListener = obj;
-}
-
-void SearchProvider::addService(Service service)
-{
-       bool found = false;
 
-       std::list<Service>::iterator iterator;
-
-       bool match = false;
-
-       for (iterator = services.begin(); iterator != services.end(); ++iterator) {
-               if (iterator->getId() == service.getId()) {
-                       match = true;
-                       break;
-               }
-       }
-
-       if (!match) {
-               services.push_back(service);
-               found = true;
-
-               if (found) {
-                       Search::st_onFound(service);
-               }
-       } else {
-       }
-}
-
-void SearchProvider::removeService(Service service)
-{
-       if (&service == NULL) {
-               return;
-       }
-
-       std::list<Service>::iterator it = services.begin();
-       while (it != services.end()) {
-               if (((*it).getId()) == (service.getId())) {
-                       services.erase(it++);
-               } else {
-                       it++;
-               }
-       }
-}
-
-void SearchProvider::removeServiceAndNotify(Service service)
-{
-       removeService(service);
-       Search::st_onLost(service);
-}
 
 void SearchProvider::clearServices()
 {
-       services.clear();
+       Search::services.clear();
 }
 
 Service SearchProvider::getServiceById(string id)
 {
        std::list<Service>::iterator iterator;
-       for (iterator = services.begin(); iterator != services.end(); ++iterator) {
+       for (iterator = Search::services.begin(); iterator != Search::services.end(); ++iterator) {
                if (((*iterator).getId()) == id) {
                        return(*iterator);
                }
@@ -166,7 +116,7 @@ Service SearchProvider::getServiceById(string id)
 Service SearchProvider::getServiceByIp(string ip)
 {
        std::list<Service>::iterator iterator;
-       for (iterator = services.begin(); iterator != services.end(); ++iterator) {
+       for (iterator = Search::services.begin(); iterator != Search::services.end(); ++iterator) {
 
                string url = (*iterator).getUri();
                std::string::size_type pos = url.find(ip);
@@ -204,9 +154,10 @@ void SearchProvider::push_in_alivemap(long ttl, string id, int service_type)
 
 void SearchProvider::updateAlive(long ttl, string id, int service_type)
 {
-       MSF_DBG("updateAlive : ttl = %d, id = %s, service_type = %d", ttl, id.c_str(), service_type);
+       MSF_DBG("updateAlive : ttl = %d, id = %s, service_type = %s", ttl, id.c_str(), (service_type == 1)? "MSFD" : "MDNS");
 
        if (id.empty()) {
+               MSF_DBG("updateAlive id is empty");
                return;
        }
 
@@ -230,7 +181,7 @@ void SearchProvider::reapServices()
                        Service service=getServiceByIp(it->first);
                        MSF_DBG("reapServices - Remove service : [%s]", service.getId().c_str());
                        aliveMap.erase(it->first);
-                       removeServiceAndNotify(service);
+                       Search::removeServiceAndNotify(service);
                }
        }
 }
index 8f5a9f8..c522b87 100644 (file)
  * limitations under the License.
  */
 
-#include "mDNSSearchProvider.h"
 #include <stdlib.h>
-#include "Debug.h"
 #include <list>
 #include "Error.h"
+#include "Debug.h"
+#include "mDNSSearchProvider.h"
+#include "Search.h"
 
 #define SERVICE_TYPE "_samsungmsf._tcp"
 
@@ -77,11 +78,6 @@ SearchProvider mDNSSearchProvider::create(Search *searchListener)
        return (SearchProvider)mDNSSearchProvider(searchListener);
 }
 
-void mDNSSearchProvider::addService(Service service)
-{
-       this->SearchProvider::addService(service);
-}
-
 void mDNSSearchProvider::updateAlive(long ttl, string id, int service_type)
 {
        this->SearchProvider::updateAlive(ttl, id, service_type);
@@ -295,7 +291,7 @@ void mDNSSearchProvider::reapServices()
 void MDNSServiceCallback::onSuccess(Service service)
 {
        MSF_DBG("\n [MSF : API] Debug log Function : [%s] and line [%d] in file [%s] \n",__FUNCTION__ ,__LINE__,__FILE__);
-       provider->addService(service);
+       Search::addService(service);
        string ip = provider->getIP(service.getUri());
        provider->push_in_alivemap(0x00ffffff, ip, MDNS);
        MSF_DBG("service : id( %s ) registerd.", ip.c_str());