From 407bf8847c2ed391833909233c95faf66cda195b Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期五, 12 六月 2020 10:01:26 +0800
Subject: [PATCH] add factory

---
 service/Makefile                 |    2 
 device/netdisk_factory.c         |   12 ++++++
 service/test.c                   |    2 
 device/include/netdisk_factory.h |    9 ++++
 device/test.c                    |    2 
 service/netdisk_service          |    0 
 device/hcnetdisk.c               |    4 +-
 service/request_handler.c        |   15 +++----
 device/include/netdisk.h         |   15 ++++---
 service/netdisk_service.c        |   22 +++--------
 service/test                     |    0 
 11 files changed, 48 insertions(+), 35 deletions(-)

diff --git a/device/hcnetdisk.c b/device/hcnetdisk.c
index a4fc6e0..3509b65 100644
--- a/device/hcnetdisk.c
+++ b/device/hcnetdisk.c
@@ -71,8 +71,8 @@
   port = loginInfo.port;
 
 
-  startChannel = struDeviceInfo.struDeviceV30.byStartDChan;
-  maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256;
+  deviceInfo.startChannel = struDeviceInfo.struDeviceV30.byStartDChan;
+  deviceInfo.maxChannels = struDeviceInfo.struDeviceV30.byIPChanNum + struDeviceInfo.struDeviceV30.byHighDChanNum * 256;
 
   return 0;
 }
diff --git a/device/include/netdisk.h b/device/include/netdisk.h
index f92eeb4..1af6837 100644
--- a/device/include/netdisk.h
+++ b/device/include/netdisk.h
@@ -34,12 +34,17 @@
 class Netdisk {
 private:
     std::string loginDataFile;
+    struct DeviceInfo
+    {
+        int startChannel;       //璧峰閫氶亾鍙�
+        int maxChannels;        //鏈�澶ч�氶亾鏁� 
+        
+    };
 
 protected:
     
-    int startChannel;       //璧峰閫氶亾鍙�
-    int maxChannels;        //鏈�澶ч�氶亾鏁�
-
+   
+    DeviceInfo deviceInfo;
     std::string deviceType; //璁惧绫诲瀷
     std::string loginUUID;
     std::string username;   //鐢ㄦ埛鍚�
@@ -67,9 +72,7 @@
     virtual int downloadByTime(Netdisk_DownloadRequest &request, std::vector<std::string> *files) = 0;
 
 
-    int getStartChannel() {return startChannel;}
-
-    int getMaxChannels() {return maxChannels;}
+    DeviceInfo getDeviceInfo() {return deviceInfo;}
 
 };
 
diff --git a/device/include/netdisk_factory.h b/device/include/netdisk_factory.h
new file mode 100644
index 0000000..039bceb
--- /dev/null
+++ b/device/include/netdisk_factory.h
@@ -0,0 +1,9 @@
+#ifndef __NETDISK_FACTORY_H__
+#define __NETDISK_FACTORY_H__
+#include "netdisk.h"
+class NetdiskFacotory {
+public:
+	static Netdisk *create(std::string deviceType);
+};
+
+#endif
\ No newline at end of file
diff --git a/device/netdisk_factory.c b/device/netdisk_factory.c
new file mode 100644
index 0000000..108d5b3
--- /dev/null
+++ b/device/netdisk_factory.c
@@ -0,0 +1,12 @@
+#include "netdisk_factory.h"
+Netdisk *NetdiskFacotory::create(std::string deviceType) {
+
+	if(deviceType == "HC") {
+      // std::cout << "new HCNetdisk" << std::endl;
+      return new HCNetdisk();
+    } else {
+      err_msg(0, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", deviceType.c_str());
+      return NULL;
+
+    }
+}
\ No newline at end of file
diff --git a/device/test.c b/device/test.c
index 0b99d8f..fe1e655 100644
--- a/device/test.c
+++ b/device/test.c
@@ -18,7 +18,7 @@
 	loginInfo.password = "a1234567";
 	netdisk->login(loginInfo);
 
-	std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl;
+	//std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl;
 
 	
 	//涓嬭浇
diff --git a/service/Makefile b/service/Makefile
index af5b61d..2e70b29 100644
--- a/service/Makefile
+++ b/service/Makefile
@@ -18,7 +18,7 @@
 
 test_properties: properties_config.c
 
-netdisk_service: $(ROOT)/device/hcnetdisk.c login_store.c request_handler.c properties_config.c
+netdisk_service: $(ROOT)/device/hcnetdisk.c $(ROOT)/device/netdisk_factory.c login_store.c request_handler.c properties_config.c
 
 test: $(ROOT)/device/hcnetdisk.c
 
diff --git a/service/netdisk_service b/service/netdisk_service
index ac87c6f..975f752 100755
--- a/service/netdisk_service
+++ b/service/netdisk_service
Binary files differ
diff --git a/service/netdisk_service.c b/service/netdisk_service.c
index c71a014..bed648c 100644
--- a/service/netdisk_service.c
+++ b/service/netdisk_service.c
@@ -4,14 +4,13 @@
 #include "login_store.h"
 #include "request_handler.h"
 #include "properties_config.h"
+#include "netdisk_factory.h"
 #include <jsoncpp/json/json.h>
 #include <nng/nng.h>
 #include <nng/protocol/reqrep0/rep.h>
 #include <nng/protocol/reqrep0/req.h>
 
 using namespace std;
-
-
 
 static int work(Netdisk_DownloadRequest drequest);
 static int connectAndSend(const char *url, char * str);
@@ -23,7 +22,7 @@
 
 PropertiesConfig config("../data/config.txt");
 
-SafeQueue<Netdisk_DownloadRequest> task_queue(10);
+SafeQueue<Netdisk_DownloadRequest> task_queue(100);
 
 std::map<std::string, Netdisk *> userDeviceMap;
 
@@ -78,14 +77,12 @@
 
   Netdisk_LoginInfo loginInfo = loginStore.getLoginInfo(drequest.loginUUID);
   if (netdisk == NULL) {
-   
-    if(loginInfo.deviceType == "HC") {
-      // std::cout << "new HCNetdisk" << std::endl;
-      netdisk = new HCNetdisk();
+
+    netdisk = NetdiskFacotory::create(loginInfo.deviceType);
+    if(netdisk != NULL) {
       userDeviceMap.insert({loginInfo.loginUUID, netdisk});
     } else {
       err_msg(0, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str());
-
     }
   }
 
@@ -162,14 +159,7 @@
     } else {
       std::cerr << "Don't support " << method << std::endl;
     }
-    // if (method == "login") {
-    //   handleLogin(sock, request);
-    // } else if (method == "downloadByTime") {
-    //   handleDownloadByTimeAsync(sock, request);
-    // } else {
-    //   std::cerr << "Don't support " << method << std::endl;
-    // }
-    // Unrecognized command, so toss the buffer.
+    
     nng_free(buf, sz);
   }
 }
diff --git a/service/request_handler.c b/service/request_handler.c
index 27f2132..592bcd7 100644
--- a/service/request_handler.c
+++ b/service/request_handler.c
@@ -1,4 +1,5 @@
 #include "request_handler.h"
+#include "netdisk_factory.h"
 
 extern SafeQueue<Netdisk_DownloadRequest> task_queue;
 
@@ -34,10 +35,10 @@
   if( userDeviceIter != userDeviceMap.end() ) {
      netdisk = userDeviceIter->second;
   }
+
   if (netdisk == NULL) {
-    if(loginInfo.deviceType == "HC") {
-      // std::cout << "new HCNetdisk" << std::endl;
-      netdisk = new HCNetdisk();
+    netdisk = NetdiskFacotory::create(loginInfo.deviceType);
+    if(netdisk != NULL) {
       userDeviceMap.insert({loginInfo.loginUUID, netdisk});
     } else {
       err_msg(0, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str());
@@ -47,7 +48,7 @@
   code = netdisk->login(loginInfo);
   if (code == 0) {
     loginStore.saveLoginInfo(loginInfo);
-    std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl;
+    std::cout << "璧峰閫氶亾:" << netdisk->getDeviceInfo().startChannel << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getDeviceInfo().maxChannels << std::endl;
   }
  
 
@@ -150,13 +151,11 @@
   Netdisk_LoginInfo loginInfo = loginStore.getLoginInfo(drequest.loginUUID);
   if (netdisk == NULL) {
    
-    if(loginInfo.deviceType == "HC") {
-      // std::cout << "new HCNetdisk" << std::endl;
-      netdisk = new HCNetdisk();
+    netdisk = NetdiskFacotory::create(loginInfo.deviceType);
+    if(netdisk != NULL) {
       userDeviceMap.insert({loginInfo.loginUUID, netdisk});
     } else {
       err_msg(0, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str());
-
     }
   }
 
diff --git a/service/test b/service/test
index 6a3c133..cb9b0ce 100755
--- a/service/test
+++ b/service/test
Binary files differ
diff --git a/service/test.c b/service/test.c
index d8a777c..489af99 100644
--- a/service/test.c
+++ b/service/test.c
@@ -19,7 +19,7 @@
 	loginInfo.password = "a1234567";
 	netdisk->login(loginInfo);
 
-	std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl;
+	//std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl;
 
 	
 	//涓嬭浇

--
Gitblit v1.8.0