From 602442ecedf17800cddfdae188b05b40345cb011 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期五, 12 六月 2020 12:08:46 +0800
Subject: [PATCH] version

---
 common/include/usg_typedef.h |    5 
 service/Makefile             |    5 
 service/request_handler.h    |    4 
 service/netdisk_service      |    0 
 test/test                    |    0 
 service/request_handler.c    |  127 +++++++++++++++++++-
 device/include/netdisk.h     |   16 +-
 service/netdisk_service.c    |   42 ++++--
 service/test_client          |    0 
 test/Makefile                |    2 
 service/core                 |    0 
 test/test.c                  |    8 +
 service/test_client.c        |  103 +++++++++++++----
 13 files changed, 249 insertions(+), 63 deletions(-)

diff --git a/common/include/usg_typedef.h b/common/include/usg_typedef.h
index a3b9a81..55796e1 100644
--- a/common/include/usg_typedef.h
+++ b/common/include/usg_typedef.h
@@ -43,7 +43,10 @@
 #define MIN(a,b)  ((a) < (b) ? (a) : (b))
 #define MAX(a,b)  ((a) > (b) ? (a) : (b))
 
- 
+
+/* Misc constants */
+#define	MAXLINE	 1024  /* Max text line length */
+#define MAXBUF   8192  /* Max I/O buffer size */
 
 #ifdef __cplusplus
 }
diff --git a/device/include/netdisk.h b/device/include/netdisk.h
index 1af6837..b2b3fb6 100644
--- a/device/include/netdisk.h
+++ b/device/include/netdisk.h
@@ -28,22 +28,20 @@
 
 } Netdisk_DownloadRequest;
 
- 
+typedef struct DeviceInfo
+{
+    int startChannel;       //璧峰閫氶亾鍙�
+    int maxChannels;        //鏈�澶ч�氶亾鏁� 
+    
+} DeviceInfo;
 
 // 缃戠粶纭洏 鎶借薄绫�
 class Netdisk {
 private:
     std::string loginDataFile;
-    struct DeviceInfo
-    {
-        int startChannel;       //璧峰閫氶亾鍙�
-        int maxChannels;        //鏈�澶ч�氶亾鏁� 
-        
-    };
+   
 
 protected:
-    
-   
     DeviceInfo deviceInfo;
     std::string deviceType; //璁惧绫诲瀷
     std::string loginUUID;
diff --git a/service/Makefile b/service/Makefile
index 2e70b29..9fa2483 100644
--- a/service/Makefile
+++ b/service/Makefile
@@ -14,14 +14,15 @@
 PLATFORM=$(shell $(ROOT)/systype.sh)
 include $(ROOT)/Make.defines.$(PLATFORM)
 
-all: netdisk_service client test test_queue test_properties
+all: netdisk_service test_client test test_queue test_properties
 
-test_properties: 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
 
+test_properties: properties_config.c
+
 clean:
 	rm -f test *.o a.out core temp.* *.a *.so
 
diff --git a/service/core b/service/core
new file mode 100644
index 0000000..cdb796e
--- /dev/null
+++ b/service/core
Binary files differ
diff --git a/service/netdisk_service b/service/netdisk_service
index 975f752..8d70d93 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 bed648c..3612b21 100644
--- a/service/netdisk_service.c
+++ b/service/netdisk_service.c
@@ -69,35 +69,37 @@
 
 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) {
 
     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["rv"] = rv;
+  response["code"] = rv;
+  response["msg"] = rmsg;
 
   Json::Value filelist;
   for(std::string f : files) {
@@ -150,6 +152,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);
@@ -160,15 +163,20 @@
       std::cerr << "Don't support " << method << std::endl;
     }
     
-    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;
@@ -178,15 +186,17 @@
 
 int main()
 {
-
-  Netdisk_EnvConfig hcEnvConfig;
-  hcEnvConfig.libpath = config.get("hclib");
-  HCNetdisk::netdisk_init(&hcEnvConfig);
-
+  //鐜鍙橀噺鍒濆鍖�
   WORKERS = config.getInt("workers");
   localUrl = config.get("local_url");
   remoteUrl = config.get("remote_url");
 
+  //娴峰悍璁惧鐜鍒濆鍖�
+  Netdisk_EnvConfig hcEnvConfig;
+  hcEnvConfig.libpath = config.get("hclib");
+  HCNetdisk::netdisk_init(&hcEnvConfig);
+
+ 
 
   registRequestHandleFun();
 
diff --git a/service/request_handler.c b/service/request_handler.c
index 592bcd7..8bbd910 100644
--- a/service/request_handler.c
+++ b/service/request_handler.c
@@ -14,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;
 
@@ -41,21 +43,24 @@
     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->getDeviceInfo().startChannel << ", 鏈�澶ч�氶亾鍙凤細" << netdisk->getDeviceInfo().maxChannels << 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();
   // nng鍐呴儴浼氶噴鏀綽uf
@@ -68,11 +73,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;
   int rv;
+  char rmsg[MAXLINE];
+  strcpy(rmsg, "received");
   // char *buf;
   
   Json::Value arguments = request["arguments"];
@@ -103,6 +213,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) {
@@ -110,8 +221,6 @@
     return rv;
   }
   return 0;
-
-
 }
     
 int handleDownloadByTime(nng_socket sock, Json::Value request) {
diff --git a/service/request_handler.h b/service/request_handler.h
index da51eaf..704412c 100644
--- a/service/request_handler.h
+++ b/service/request_handler.h
@@ -11,5 +11,7 @@
 typedef int (*RequestHandleFun)(nng_socket sock, Json::Value request);
 
 int handleLogin(nng_socket sock, Json::Value request);
+int handleLogout(nng_socket sock, Json::Value request);
 int handleDownloadByTime(nng_socket sock, Json::Value request);
-int handleDownloadByTimeAsync(nng_socket sock, Json::Value request);
\ No newline at end of file
+int handleDownloadByTimeAsync(nng_socket sock, Json::Value request);
+int handleGetDeviceInfo(nng_socket sock, Json::Value request);
\ No newline at end of file
diff --git a/service/test_client b/service/test_client
new file mode 100755
index 0000000..87a2890
--- /dev/null
+++ b/service/test_client
Binary files differ
diff --git a/service/client.c b/service/test_client.c
similarity index 68%
rename from service/client.c
rename to service/test_client.c
index 170e788..368f641 100644
--- a/service/client.c
+++ b/service/test_client.c
@@ -43,6 +43,54 @@
 	 
 }
 
+void doGetDeviceInfo(nng_socket sock) {
+	char *     buf = NULL;
+	int        rv;
+	size_t     sz;
+	Json::Value request;
+	 request["method"] = "getDeviceInfo";
+	Json::Value arguments;
+    arguments["loginUUID"] = "1";
+    request["arguments"]= arguments;
+
+    std::string str = request.toStyledString();
+
+    if ((rv = nng_send(sock, strdup(str.c_str()), str.length(), 0)) != 0) {
+		fatal("nng_send", rv);
+	}
+	if ((rv = nng_recv(sock, &buf, &sz, NNG_FLAG_ALLOC)) != 0) {
+		fatal("nng_recv", rv);
+	}
+	std::cout << buf;
+	nng_free(buf, sz);
+	
+	 
+}
+
+void doLogout(nng_socket sock) {
+	char *     buf = NULL;
+	int        rv;
+	size_t     sz;
+	Json::Value request;
+	 request["method"] = "logout";
+	Json::Value arguments;
+    arguments["loginUUID"] = "1";
+    request["arguments"]= arguments;
+
+    std::string str = request.toStyledString();
+
+    if ((rv = nng_send(sock, strdup(str.c_str()), str.length(), 0)) != 0) {
+		fatal("nng_send", rv);
+	}
+	if ((rv = nng_recv(sock, &buf, &sz, NNG_FLAG_ALLOC)) != 0) {
+		fatal("nng_recv", rv);
+	}
+	std::cout << buf;
+	nng_free(buf, sz);
+	
+	 
+}
+
 void doDownloadByTime(nng_socket sock) {
 	char *     buf = NULL;
 	int        rv;
@@ -93,8 +141,10 @@
 	 
 }
 
+
+
 int
-client(const char *method)
+runclient(const char *method)
 {
 	nng_socket sock;
 	int        rv;
@@ -105,18 +155,35 @@
 	if ((rv = nng_dial(sock, url, NULL, 0)) != 0) {
 		fatal("nng_dial", rv);
 	}
-	printf("CLIENT: SENDING DATE REQUEST\n");
+	//printf("CLIENT: SENDING DATE REQUEST\n");
 
 	if (strcmp(method, "login") == 0) {
 		doLogin(sock);
 	} else if (strcmp(method, "download") == 0) {
 		doDownloadByTime(sock);
+	} else if (strcmp(method, "getDeviceInfo") == 0) {
+		doGetDeviceInfo(sock);
+	} else if (strcmp(method, "logout") == 0) {
+		doLogout(sock);
 	} else {
 		printf("Don't surpport %s \n", method);
 	}
 	
 	nng_close(sock);
 	return (0);
+}
+
+
+void *client(void *vargp) {
+	char method[1024]={0};
+	for(;;) {
+		printf("===璇疯緭鍏ヨ姹傛柟娉曪細\n");
+		scanf("%s", method);
+		if (strcmp(method, "q") == 0) {
+			exit(0);
+		}
+		runclient(method);
+	}
 }
 
 int
@@ -137,7 +204,9 @@
 		if ((rv = nng_recv(sock, &buf, &sz, NNG_FLAG_ALLOC)) != 0) {
 			fatal("nng_recv", rv);
 		}
+		printf("===Received Call Back===\n");
 		std::cout << buf << std::endl;
+		nng_free(buf, sz);
 
 		Json::Value response;
 		response["code"] = 0;
@@ -146,21 +215,7 @@
 		if (rv != 0) {
 			fatal("nng_send", rv);
 		}
-		// if ((sz == sizeof(uint64_t)) &&
-		//     ((GET64(buf, val)) == DATECMD)) {
-		// 	time_t now;
-		// 	printf("SERVER: RECEIVED DATE REQUEST\n");
-		// 	now = time(&now);
-		// 	printf("SERVER: SENDING DATE: ");
-		// 	showdate(now);
-
-		// 	// Reuse the buffer.  We know it is big enough.
-		// 	PUT64(buf, (uint64_t) now);
-			
-		// 	continue;
-		// }
-		// Unrecognized command, so toss the buffer.
-		//nng_free(buf, sz);
+		 
 	}
 }
 
@@ -168,14 +223,14 @@
 int
 main(const int argc, const char **argv)
 {
-	if ((argc > 1)) {
-	  client(argv[1]);
-	  server();
-	}
+	 
 	// std::string str("123");
 	// char *str2="123";
 	// printf("str length  %d, %d\n", str.length(), strlen(str2));
-
-	fprintf(stderr, "Usage: client  <method> ...\n");
-	return (1);
+	pthread_t tid;
+    pthread_create(&tid, NULL, client, NULL);
+	 
+	server();
+	return 0;
+	
 }
\ No newline at end of file
diff --git a/test/Makefile b/test/Makefile
index 8080681..c8fa824 100755
--- a/test/Makefile
+++ b/test/Makefile
@@ -13,7 +13,7 @@
 
  
 
-all: nng/reqrep
+all: nng/reqrep test
 
 
 clean:
diff --git a/test/test b/test/test
new file mode 100755
index 0000000..cc3b0c5
--- /dev/null
+++ b/test/test
Binary files differ
diff --git a/test/test.c b/test/test.c
new file mode 100644
index 0000000..2ea0191
--- /dev/null
+++ b/test/test.c
@@ -0,0 +1,8 @@
+#include "usg_common.h"
+#include "usg_typedef.h"
+
+int main() {
+	char *str = "123";
+	char *str2 = strdup(str);
+	free(str2);
+}
\ No newline at end of file

--
Gitblit v1.8.0