From 7ba5854ad1bc770a03d620cea78bafdc62dfdf24 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期五, 19 六月 2020 18:16:31 +0800 Subject: [PATCH] update --- service/netdisk_service.c | 119 ++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 65 insertions(+), 54 deletions(-) diff --git a/service/netdisk_service.c b/service/netdisk_service.c index 8d31587..1f55786 100644 --- a/service/netdisk_service.c +++ b/service/netdisk_service.c @@ -4,6 +4,7 @@ #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> @@ -11,21 +12,16 @@ using namespace std; - - -int work(Netdisk_DownloadRequest drequest); - - -PropertiesConfig config("../data/config.txt"); +static int work(Netdisk_DownloadRequest drequest); +static int connectAndSend(const char *url, char * str); int WORKERS ; -std::string localUrl; std::string remoteUrl; +PropertiesConfig config("../data/config.txt"); - -SafeQueue<Netdisk_DownloadRequest> task_queue(10); +SafeQueue<Netdisk_DownloadRequest> task_queue(100); std::map<std::string, Netdisk *> userDeviceMap; @@ -70,58 +66,59 @@ } -void *worker(void *vargp) -{ - pthread_detach(pthread_self()); - while (1) - { - Netdisk_DownloadRequest request; - task_queue.pop(request); - work(request); - } -} - int work(Netdisk_DownloadRequest drequest) { Netdisk *netdisk = NULL; + std::vector<std::string> files; int rv; + char rmsg[MAXLINE]; + strcpy(rmsg, "success"); + Netdisk_LoginInfo loginInfo = loginStore.getLoginInfo(drequest.loginUUID); std::map<std::string, Netdisk *>::iterator userDeviceIter = userDeviceMap.find( drequest.loginUUID); if( userDeviceIter != userDeviceMap.end() ) { netdisk = userDeviceIter->second; } - 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()); - + snprintf(rmsg, MAXLINE, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str()); } } if ( (rv = netdisk->login(loginInfo)) != 0 ) { - printf("涓嬭浇鐧诲綍澶辫触\n"); + snprintf(rmsg, MAXLINE, "璇烽噸鏂扮櫥褰�"); + } else if ( (rv = netdisk->downloadByTime(drequest, &files) ) != 0) { + snprintf(rmsg, MAXLINE, "涓嬭浇澶辫触"); } + - std::vector<std::string> files; - if ( (rv = netdisk->downloadByTime(drequest, &files) ) != 0) { - printf("涓嬭浇澶辫触\n"); - } + // Json::Value response; + // Json::Value payload; + // response["code"] = rv; + // response["msg"] = rmsg; - Json::Value response; - Json::Value payload; - response["rv"] = rv; + // Json::Value filelist; + // for(std::string f : files) { + // filelist.append(f); + // } + // payload["filelist"] = filelist; + // response["payload"] = payload; + Json::Value request; + request["method"] = "downloadByTimeCallBack"; + Json::Value arguments; Json::Value filelist; for(std::string f : files) { filelist.append(f); } - payload["filelist"] = filelist; - response["payload"] = payload; - std::string str = response.toStyledString(); + arguments["fileList"] = filelist; + arguments["loginUUID"] = drequest.loginUUID; + + request["arguments"] = arguments; + std::string str = request.toStyledString(); std::cout << "download finished, call back" << std::endl; std::cout << str << std::endl; @@ -129,6 +126,20 @@ return 0; } + +void *worker(void *vargp) +{ + pthread_detach(pthread_self()); + while (1) + { + Netdisk_DownloadRequest request; + task_queue.pop(request); + err_msg(0, "====take a task"); + work(request); + } +} + + void startServer(const char *url) { Json::Reader jsonreader; @@ -153,6 +164,7 @@ } jsonreader.parse(buf, request); + nng_free(buf, sz); std::string method = request["method"].asString(); std::map<std::string, RequestHandleFun>::iterator handleFunIter = requestHandleFunMap.find(method); @@ -162,23 +174,21 @@ } 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); + + } } - +/** + * 娉ㄥ唽璇锋眰澶勭悊鐨勬柟娉� + */ void registRequestHandleFun() { requestHandleFunMap.insert({"login", handleLogin}); + requestHandleFunMap.insert({"logout", handleLogout}); requestHandleFunMap.insert({"downloadByTime", handleDownloadByTimeAsync}); + requestHandleFunMap.insert({"getDeviceInfo", handleGetDeviceInfo}); } + void initThreadPool() { pthread_t tid; @@ -188,21 +198,22 @@ int main() { + //鐜鍙橀噺鍒濆鍖� + WORKERS = config.getInt("workers"); + remoteUrl = config.get("client_url"); + //娴峰悍璁惧鐜鍒濆鍖� Netdisk_EnvConfig hcEnvConfig; - hcEnvConfig.libpath = config.get("hclib"); + hcEnvConfig.libpath = "../lib/hc"; HCNetdisk::netdisk_init(&hcEnvConfig); - WORKERS = config.getInt("workers"); - localUrl = config.get("local_url"); - remoteUrl = config.get("remote_url"); - + registRequestHandleFun(); initThreadPool(); - startServer(localUrl.c_str()); + startServer(config.get("server_url").c_str()); HCNetdisk::netdisk_deinit(); -- Gitblit v1.8.0