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