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