wangzhengquan
2020-09-10 591aacee97f4a6486631c38a6b418e20b2c4109c
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,23 +43,28 @@
    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();
err_msg(0, "login send back:\n %s", str.c_str());
  // nng内部会释放buf
  rv = nng_send(sock, strdup(str.c_str()), str.length(), NNG_FLAG_ALLOC);
  //free(buf);
@@ -68,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内部会释放buf
  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内部会释放buf
  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"];
@@ -103,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) {
@@ -110,8 +223,6 @@
    return rv;
  }
  return 0;
}
    
int handleDownloadByTime(nng_socket sock, Json::Value request) {