From 591aacee97f4a6486631c38a6b418e20b2c4109c Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 10 九月 2020 14:56:47 +0800 Subject: [PATCH] update --- service/request_handler.c | 144 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 127 insertions(+), 17 deletions(-) diff --git a/service/request_handler.c b/service/request_handler.c index 27f2132..af4d9e7 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; @@ -13,8 +14,10 @@ } int handleLogin(nng_socket sock, Json::Value request) { -std::cout << "accepted login request" << std::endl; - int rv, code; +std::cout << "===accepted login request" << std::endl; + int rv; + char rmsg[MAXLINE]; + strcpy(rmsg, "success"); // char *buf; Netdisk *netdisk = NULL; @@ -34,29 +37,34 @@ 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()); + + //rvout << "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細" << loginInfo.deviceType.c_str(); + snprintf(rmsg, MAXLINE, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str()); } } - code = netdisk->login(loginInfo); - if (code == 0) { + rv = netdisk->login(loginInfo); + if (rv == 0) { loginStore.saveLoginInfo(loginInfo); - std::cout << "璧峰閫氶亾:" << netdisk->getStartChannel() << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getMaxChannels() << std::endl; + // std::cout << "璧峰閫氶亾:" << netdisk->getDeviceInfo().startChannel << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getDeviceInfo().maxChannels << std::endl; } Json::Value response; Json::Value payload; payload["loginUUID"] = loginInfo.loginUUID; - response["code"] = code; + response["code"] = rv; + response["msg"] = rmsg; response["payload"] = payload; const std::string str = response.toStyledString(); + +err_msg(0, "login send back:\n %s", str.c_str()); // nng鍐呴儴浼氶噴鏀綽uf rv = nng_send(sock, strdup(str.c_str()), str.length(), NNG_FLAG_ALLOC); //free(buf); @@ -67,11 +75,116 @@ return 0; } +int handleLogout(nng_socket sock, Json::Value request) { +std::cout << "===accepted logout request" << std::endl; + int rv; + char rmsg[MAXLINE]; + strcpy(rmsg, "success"); + // char *buf; + Netdisk *netdisk = NULL; + + Json::Value arguments = request["arguments"]; + std::string loginUUID=arguments["loginUUID"].asString(); + Netdisk_LoginInfo loginInfo = loginStore.getLoginInfo(loginUUID); + + std::map<std::string, Netdisk *>::iterator userDeviceIter = userDeviceMap.find(loginUUID); + if( userDeviceIter != userDeviceMap.end() ) { + netdisk = userDeviceIter->second; + } + + if (netdisk == NULL) { + netdisk = NetdiskFacotory::create(loginInfo.deviceType); + if(netdisk != NULL) { + userDeviceMap.insert({loginInfo.loginUUID, netdisk}); + } else { + + //rvout << "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細" << loginInfo.deviceType.c_str(); + snprintf(rmsg, MAXLINE, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str()); + } + } + + rv = netdisk->logout(); + + Json::Value response; + response["code"] = rv; + response["msg"] = rmsg; + Json::Value payload; + payload["loginUUID"] = loginInfo.loginUUID; + response["payload"] = payload; + const std::string str = response.toStyledString(); + // nng鍐呴儴浼氶噴鏀綽uf + rv = nng_send(sock, strdup(str.c_str()), str.length(), NNG_FLAG_ALLOC); + if (rv != 0) { + fatal("nng_send", rv); + return rv; + } + return 0; +} + + +int handleGetDeviceInfo(nng_socket sock, Json::Value request) { +std::cout << "===accepted getDeviceInfo request" << std::endl; + int rv; + char rmsg[MAXLINE]; + strcpy(rmsg, "success"); + // char *buf; + Netdisk *netdisk = NULL; + DeviceInfo deviceInfo; + + Json::Value arguments = request["arguments"]; + std::string loginUUID=arguments["loginUUID"].asString(); + + Netdisk_LoginInfo loginInfo = loginStore.getLoginInfo(loginUUID); + + std::map<std::string, Netdisk *>::iterator userDeviceIter = userDeviceMap.find(loginUUID); + if( userDeviceIter != userDeviceMap.end() ) { + netdisk = userDeviceIter->second; + } + + if (netdisk == NULL) { + netdisk = NetdiskFacotory::create(loginInfo.deviceType); + if(netdisk != NULL) { + userDeviceMap.insert({loginInfo.loginUUID, netdisk}); + } else { + + //rvout << "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細" << loginInfo.deviceType.c_str(); + snprintf(rmsg, MAXLINE, "鏃犳硶璇嗗埆鐨勮澶囩被鍨嬶細 %s", loginInfo.deviceType.c_str()); + } + } + + if ( (rv = netdisk->login(loginInfo)) != 0 ) { + snprintf(rmsg, MAXLINE, "璇烽噸鏂扮櫥褰�"); + } else { + deviceInfo = netdisk->getDeviceInfo(); + } + + Json::Value response; + response["code"] = rv; + response["msg"] = rmsg; + Json::Value payload; + payload["loginUUID"] = loginUUID; + Json::Value jsonDeviceInfo; + jsonDeviceInfo["startChannel"] = deviceInfo.startChannel; + jsonDeviceInfo["maxChannels"] = deviceInfo.maxChannels; + payload["deviceInfo"] = jsonDeviceInfo; + response["payload"] = payload; + const std::string str = response.toStyledString(); + // nng鍐呴儴浼氶噴鏀綽uf + rv = nng_send(sock, strdup(str.c_str()), str.length(), NNG_FLAG_ALLOC); + if (rv != 0) { + fatal("nng_send", rv); + return rv; + } + return 0; +} + int handleDownloadByTimeAsync(nng_socket sock, Json::Value request) { -std::cout << "accepted handleDownloadByTime request" << std::endl; +std::cout << "received downloadByTime request" << std::endl; int rv; + char rmsg[MAXLINE]; + strcpy(rmsg, "received downloadByTime request"); // char *buf; Json::Value arguments = request["arguments"]; @@ -102,6 +215,7 @@ Json::Value response; response["code"] = 0; + response["msg"] = rmsg; std::string str = response.toStyledString(); std::cout << str << std::endl; if ((rv = nng_send(sock, strdup(str.c_str()), str.length(), NNG_FLAG_ALLOC)) != 0) { @@ -109,8 +223,6 @@ return rv; } return 0; - - } int handleDownloadByTime(nng_socket sock, Json::Value request) { @@ -150,13 +262,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()); - } } -- Gitblit v1.8.0