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