Server/郭文强/code/FaceProject/FaceProject/.vs/FaceProject/v14/.suoBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.Build.CppClean.log
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.log
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/CL.command.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/CL.read.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/CL.write.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/FaceProject.lastbuildstate
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/link.command.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/link.read.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/FaceProject.tlog/link.write.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/Server_XML.objBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/tinyxml2.objBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/vc140.idbBinary files differ
Server/郭文强/code/FaceProject/FaceProject/Debug/vc140.pdbBinary files differ
Server/郭文强/code/FaceProject/FaceProject/FaceProject.VC.dbBinary files differ
Server/郭文强/code/FaceProject/FaceProject/FaceProject.vcxproj
Server/郭文强/code/FaceProject/FaceProject/FaceProject.vcxproj.filters
Server/郭文强/code/FaceProject/FaceProject/FaceProject/NetworkConfig.cpp
@@ -1,377 +0,0 @@ #include "stdafx.h" #include "NetworkConfig.h" bool NetworkConfig::startupModeSelected = false; NetworkConfig::NetworkConfig(const std::string& xmlFilePath) { tinyxml2::XMLError eResult = doc.LoadFile(xmlFilePath.c_str()); loaded = (eResult == tinyxml2::XML_SUCCESS); if (!startupModeSelected) { std::string selectedMode; std::time_t lastModifiedTime = 0; std::cout << "Please select the startup mode (cold_start/hot_start): " << std::endl; std::cin >> selectedMode; if (this->setStartupMode(selectedMode)) { std::cout << "Selected " << selectedMode << std::endl; if (this->saveXML("config.xml")) { std::cout << "( XML file saved successfully )" << std::endl; } else { std::cout << "( Failed to save XML file )" << std::endl; } if (selectedMode == "cold_start") { StartupMode currentMode = StartupMode::ColdStart; this->restartServices(currentMode, "config.xml", lastModifiedTime); } else if (selectedMode == "hot_start") { startupModeSelected = true; NetworkConfig oldParser("Info.xml"); StartupMode currentMode = StartupMode::HotStart; this->restartServices(currentMode, "config.xml", lastModifiedTime); } } else { std::cout << "Invalid startup mode. Please enter cold_start or hot_start." << std::endl; } startupModeSelected = true; } } NetworkConfig::~NetworkConfig() { } bool NetworkConfig::isLoaded() const { return loaded; } bool NetworkConfig::getTCPConfig(std::string & ipAddress, int & portNumber) { if (!loaded) return false; tinyxml2::XMLElement* tcpElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("TCP"); if (tcpElement) { const char* ip = tcpElement->FirstChildElement("IPAddress")->GetText();// Get IP address text if (ip) ipAddress = ip; portNumber = std::stoi(tcpElement->FirstChildElement("PortNumber")->GetText());// Get port number return true; } return false; } bool NetworkConfig::getRTSPConfig(std::string & ipAddress, int & portNumber) { if (!loaded) return false; tinyxml2::XMLElement* rtspElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("RTSP"); if (rtspElement) { const char* ip = rtspElement->FirstChildElement("IPAddress")->GetText(); // Get IP address text if (ip) ipAddress = ip; rtspElement->FirstChildElement("PortNumber")->QueryIntText(&portNumber);// Get port number return true; } return false; } bool NetworkConfig::getLogConfig(std::string & path, int & size) { if (!loaded) return false; tinyxml2::XMLElement* logElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Log"); if (logElement) { const char* logPath = logElement->FirstChildElement("Path")->GetText(); // Get log path text if (logPath) path = logPath; logElement->FirstChildElement("Size")->QueryIntText(&size);// Get log size return true; } return false; } bool NetworkConfig::getMySQLConfig(std::string & ip, int & port, std::string & db, std::string & user, std::string & password) { if (!loaded) return false; tinyxml2::XMLElement* mysqlElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("MySQL"); if (mysqlElement) { const char* mysqlIp = mysqlElement->FirstChildElement("IP")->GetText(); // Get IP address text if (mysqlIp) ip = mysqlIp; mysqlElement->FirstChildElement("port")->QueryIntText(&port); const char* mysqlDb = mysqlElement->FirstChildElement("db")->GetText(); // Get database name text if (mysqlDb) db = mysqlDb; const char* mysqlUser = mysqlElement->FirstChildElement("user")->GetText(); // Get username text if (mysqlUser) user = mysqlUser; const char* mysqlPassword = mysqlElement->FirstChildElement("password")->GetText(); // Get password text if (mysqlPassword) password = mysqlPassword; return true; } return false; } bool NetworkConfig::getPictureManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* pictureElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("PictureManagement"); if (pictureElement) { const char* path = pictureElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getPreprocessedPictureRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* preprocessedElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("PreprocessedPicture"); if (preprocessedElement) { const char* path = preprocessedElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getVideoManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* VideoElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("VideoManagement"); if (VideoElement) { const char* path = VideoElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getCNNModelSavePath(std::string & path) { if (!loaded) return false; tinyxml2::XMLElement* cnnElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("CNNModelSave"); if (cnnElement) { const char* cnnPath = cnnElement->FirstChildElement("Path")->GetText(); // Get save path text if (cnnPath) path = cnnPath; return true; } return false; } bool NetworkConfig::getVersionManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* versionElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("VersionManagement"); if (versionElement) { const char* path = versionElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getStartupMode(std::string & mode) { if (!loaded) return false; tinyxml2::XMLElement* startupElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("StartupMode"); if (startupElement) { const char* startupMode = startupElement->FirstChildElement("Mode")->GetText();// Get startup mode if (startupMode) mode = startupMode; return true; } return false; } bool NetworkConfig::setStartupMode(const std::string & mode) { if (!loaded || (mode != "cold_start" && mode != "hot_start")) return false; tinyxml2::XMLElement* startupElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("StartupMode"); if (startupElement) { tinyxml2::XMLElement* modeElement = startupElement->FirstChildElement("Mode"); if (modeElement) { modeElement->SetText(mode.c_str()); return true; } } return false; } bool NetworkConfig::saveXML(const std::string & xmlFilePath) { if (!loaded) return false; tinyxml2::XMLError eResult = doc.SaveFile(xmlFilePath.c_str()); return (eResult == tinyxml2::XML_SUCCESS); } void NetworkConfig::coldStart() { std::cout << "Cold start begins..." << std::endl; std::cout << "Initializing network connections...\n"; std::string tcpIp; int tcpPort; if (this->getTCPConfig(tcpIp, tcpPort)) { std::cout << "Establishing TCP connection: " << tcpIp << ":" << tcpPort << std::endl; } std::string rtspIp; int rtspPort; if (this->getRTSPConfig(rtspIp, rtspPort)) { std::cout << "Establishing RTSP connection: " << rtspIp << ":" << rtspPort << std::endl; } std::string mysqlIp, mysqlDb, mysqlUser, mysqlPassword; int mysqlPort; if (this->getMySQLConfig(mysqlIp, mysqlPort, mysqlDb, mysqlUser, mysqlPassword)) { std::cout << "Connecting to MySQL database: " << mysqlIp << ":" << mysqlPort << " - " << mysqlDb << std::endl; } std::string cnnPath; if (this->getCNNModelSavePath(cnnPath)) { std::cout << "Loading CNN model: " << cnnPath << std::endl; } std::cout << "Cold start completed." << std::endl; } void NetworkConfig::hotStart(NetworkConfig & oldParser) { std::cout << "Hot start begins..." << std::endl; std::string oldTcpIp, newTcpIp; int oldTcpPort, newTcpPort; if (oldParser.getTCPConfig(oldTcpIp, oldTcpPort) && this->getTCPConfig(newTcpIp, newTcpPort)) { if (oldTcpIp != newTcpIp || oldTcpPort != newTcpPort) { std::cout << "TCP configuration updated: " << oldTcpIp << ":" << oldTcpPort << " -> " << newTcpIp << ":" << newTcpPort << std::endl; if (setTCPConfig(newTcpIp, newTcpPort)) { std::cout << "TCP" << std::endl; std::cout << " IP: " << newTcpIp << "\n Port: " << newTcpPort << std::endl; } } } std::string oldRtspIp, newRtspIp; int oldRtspPort, newRtspPort; if (oldParser.getRTSPConfig(oldRtspIp, oldRtspPort) && this->getRTSPConfig(newRtspIp, newRtspPort)) { if (oldRtspIp != newRtspIp || oldRtspPort != newRtspPort) { std::cout << "RTSP configuration updated: " << oldRtspIp << ":" << oldRtspPort << " -> " << newRtspIp << ":" << newRtspPort << std::endl; } } std::string oldLogPath, newLogPath; int oldLogSize, newLogSize; if (oldParser.getLogConfig(oldLogPath, oldLogSize) && this->getLogConfig(newLogPath, newLogSize)) { if (oldLogPath != newLogPath || oldLogSize != newLogSize) { std::cout << "Log configuration updated: " << oldLogPath << "(" << oldLogSize << ")" << " -> " << newLogPath << "(" << newLogSize << ")" << std::endl; } } std::string oldMysqlIp, newMysqlIp, oldMysqlDb, newMysqlDb, oldMysqlUser, newMysqlUser, oldMysqlPassword, newMysqlPassword; int oldMysqlPort, newMysqlPort; if (oldParser.getMySQLConfig(oldMysqlIp, oldMysqlPort, oldMysqlDb, oldMysqlUser, oldMysqlPassword) && this->getMySQLConfig(newMysqlIp, newMysqlPort, newMysqlDb, newMysqlUser, newMysqlPassword)) { if (oldMysqlIp != newMysqlIp || oldMysqlPort != newMysqlPort || oldMysqlDb != newMysqlDb || oldMysqlUser != newMysqlUser || oldMysqlPassword != newMysqlPassword) { std::cout << "MySQL configuration updated: " << oldMysqlIp << ":" << oldMysqlPort << " - " << oldMysqlDb << " -> " << newMysqlIp << ":" << newMysqlPort << " - " << newMysqlDb << std::endl; } } std::string oldPictureRootPath, newPictureRootPath; if (oldParser.getPictureManagementRootPath(oldPictureRootPath) && this->getPictureManagementRootPath(newPictureRootPath)) { if (oldPictureRootPath != newPictureRootPath) { std::cout << "Picture management root path updated: " << oldPictureRootPath << " -> " << newPictureRootPath << std::endl; } } std::string oldVideoRootPath, newVideoRootPath; if (oldParser.getVideoManagementRootPath(oldVideoRootPath) && this->getVideoManagementRootPath(newVideoRootPath)) { if (oldVideoRootPath != newVideoRootPath) { std::cout << "Video management root path updated: " << oldVideoRootPath << " -> " << newVideoRootPath << std::endl; } } std::string oldCnnPath, newCnnPath; if (oldParser.getCNNModelSavePath(oldCnnPath) && this->getCNNModelSavePath(newCnnPath)) { if (oldCnnPath != newCnnPath) { std::cout << "CNN model save path updated: " << oldCnnPath << " -> " << newCnnPath << std::endl; } } std::string oldVersionRootPath, newVersionRootPath; if (oldParser.getVersionManagementRootPath(oldVersionRootPath) && this->getVersionManagementRootPath(newVersionRootPath)) { if (oldVersionRootPath != newVersionRootPath) { std::cout << "Version management root path updated: " << oldVersionRootPath << " -> " << newVersionRootPath << std::endl; } } std::cout << "Hot start completed." << std::endl; } bool NetworkConfig::isConfigUpdated(const std::string & xmlFilePath, std::time_t & lastModifiedTime) { struct stat fileStat; if (stat(xmlFilePath.c_str(), &fileStat) == 0) { if (fileStat.st_mtime > lastModifiedTime) { lastModifiedTime = fileStat.st_mtime; return true; } } return false; } void NetworkConfig::restartServices(StartupMode currentMode, const std::string & xmlFilePath, std::time_t & lastModifiedTime) { switch (currentMode) { case StartupMode::ColdStart: if (isConfigUpdated("Info.xml", lastModifiedTime)) { std::cout << "Configuration file parameters changed. Performing cold start to restart the entire service..." << std::endl; coldStart(); } else { std::cout << "No changes in the configuration file. Cold start is not required." << std::endl; } break; case StartupMode::HotStart: if (this->isConfigUpdated(xmlFilePath, lastModifiedTime)) { NetworkConfig oldParser(xmlFilePath); this->hotStart(oldParser); } else { std::cout << "No changes in the configuration file. Hot start is not required." << std::endl; } break; } } bool NetworkConfig::setTCPConfig(const std::string & ipAddress, int portNumber) { if (!loaded) return false; tinyxml2::XMLElement* tcpElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("TCP"); if (tcpElement) { tinyxml2::XMLElement* ipElement = tcpElement->FirstChildElement("IPAddress"); if (ipElement) { ipElement->SetText(ipAddress.c_str()); } tinyxml2::XMLElement* portElement = tcpElement->FirstChildElement("PortNumber"); if (portElement) { portElement->SetText(portNumber); } return true; } return false; } Server/郭文强/code/FaceProject/FaceProject/Info.xml
Server/郭文强/code/FaceProject/FaceProject/NetworkConfig.cpp
New file @@ -0,0 +1,377 @@ #include "stdafx.h" #include "NetworkConfig.h" bool NetworkConfig::startupModeSelected = false; NetworkConfig::NetworkConfig(const std::string& xmlFilePath) { tinyxml2::XMLError eResult = doc.LoadFile(xmlFilePath.c_str()); loaded = (eResult == tinyxml2::XML_SUCCESS); if (!startupModeSelected) { std::string selectedMode; std::time_t lastModifiedTime = 0; std::cout << "Please select the startup mode (cold_start/hot_start): " << std::endl; std::cin >> selectedMode; if (this->setStartupMode(selectedMode)) { std::cout << "Selected " << selectedMode << std::endl; if (this->saveXML("config.xml")) { std::cout << "( XML file saved successfully )" << std::endl; } else { std::cout << "( Failed to save XML file )" << std::endl; } if (selectedMode == "cold_start") { StartupMode currentMode = StartupMode::ColdStart; this->restartServices(currentMode, "config.xml", lastModifiedTime); } else if (selectedMode == "hot_start") { startupModeSelected = true; NetworkConfig oldParser("Info.xml"); StartupMode currentMode = StartupMode::HotStart; this->restartServices(currentMode, "config.xml", lastModifiedTime); } } else { std::cout << "Invalid startup mode. Please enter cold_start or hot_start." << std::endl; } startupModeSelected = true; } } NetworkConfig::~NetworkConfig() { } bool NetworkConfig::isLoaded() const { return loaded; } bool NetworkConfig::getTCPConfig(std::string & ipAddress, int & portNumber) { if (!loaded) return false; tinyxml2::XMLElement* tcpElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("TCP"); if (tcpElement) { const char* ip = tcpElement->FirstChildElement("IPAddress")->GetText();// Get IP address text if (ip) ipAddress = ip; portNumber = std::stoi(tcpElement->FirstChildElement("PortNumber")->GetText());// Get port number return true; } return false; } bool NetworkConfig::getRTSPConfig(std::string & ipAddress, int & portNumber) { if (!loaded) return false; tinyxml2::XMLElement* rtspElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("RTSP"); if (rtspElement) { const char* ip = rtspElement->FirstChildElement("IPAddress")->GetText(); // Get IP address text if (ip) ipAddress = ip; rtspElement->FirstChildElement("PortNumber")->QueryIntText(&portNumber);// Get port number return true; } return false; } bool NetworkConfig::getLogConfig(std::string & path, int & size) { if (!loaded) return false; tinyxml2::XMLElement* logElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Log"); if (logElement) { const char* logPath = logElement->FirstChildElement("Path")->GetText(); // Get log path text if (logPath) path = logPath; logElement->FirstChildElement("Size")->QueryIntText(&size);// Get log size return true; } return false; } bool NetworkConfig::getMySQLConfig(std::string & ip, int & port, std::string & db, std::string & user, std::string & password) { if (!loaded) return false; tinyxml2::XMLElement* mysqlElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("MySQL"); if (mysqlElement) { const char* mysqlIp = mysqlElement->FirstChildElement("IP")->GetText(); // Get IP address text if (mysqlIp) ip = mysqlIp; mysqlElement->FirstChildElement("port")->QueryIntText(&port); const char* mysqlDb = mysqlElement->FirstChildElement("db")->GetText(); // Get database name text if (mysqlDb) db = mysqlDb; const char* mysqlUser = mysqlElement->FirstChildElement("user")->GetText(); // Get username text if (mysqlUser) user = mysqlUser; const char* mysqlPassword = mysqlElement->FirstChildElement("password")->GetText(); // Get password text if (mysqlPassword) password = mysqlPassword; return true; } return false; } bool NetworkConfig::getPictureManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* pictureElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("PictureManagement"); if (pictureElement) { const char* path = pictureElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getPreprocessedPictureRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* preprocessedElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("PreprocessedPicture"); if (preprocessedElement) { const char* path = preprocessedElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getVideoManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* VideoElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("VideoManagement"); if (VideoElement) { const char* path = VideoElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getCNNModelSavePath(std::string & path) { if (!loaded) return false; tinyxml2::XMLElement* cnnElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("CNNModelSave"); if (cnnElement) { const char* cnnPath = cnnElement->FirstChildElement("Path")->GetText(); // Get save path text if (cnnPath) path = cnnPath; return true; } return false; } bool NetworkConfig::getVersionManagementRootPath(std::string & rootPath) { if (!loaded) return false; tinyxml2::XMLElement* versionElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("VersionManagement"); if (versionElement) { const char* path = versionElement->FirstChildElement("RootPath")->GetText(); // Get root path text if (path) rootPath = path; return true; } return false; } bool NetworkConfig::getStartupMode(std::string & mode) { if (!loaded) return false; tinyxml2::XMLElement* startupElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("StartupMode"); if (startupElement) { const char* startupMode = startupElement->FirstChildElement("Mode")->GetText();// Get startup mode if (startupMode) mode = startupMode; return true; } return false; } bool NetworkConfig::setStartupMode(const std::string & mode) { if (!loaded || (mode != "cold_start" && mode != "hot_start")) return false; tinyxml2::XMLElement* startupElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("StartupMode"); if (startupElement) { tinyxml2::XMLElement* modeElement = startupElement->FirstChildElement("Mode"); if (modeElement) { modeElement->SetText(mode.c_str()); return true; } } return false; } bool NetworkConfig::saveXML(const std::string & xmlFilePath) { if (!loaded) return false; tinyxml2::XMLError eResult = doc.SaveFile(xmlFilePath.c_str()); return (eResult == tinyxml2::XML_SUCCESS); } void NetworkConfig::coldStart() { std::cout << "Cold start begins..." << std::endl; std::cout << "Initializing network connections...\n"; std::string tcpIp; int tcpPort; if (this->getTCPConfig(tcpIp, tcpPort)) { std::cout << "Establishing TCP connection: " << tcpIp << ":" << tcpPort << std::endl; } std::string rtspIp; int rtspPort; if (this->getRTSPConfig(rtspIp, rtspPort)) { std::cout << "Establishing RTSP connection: " << rtspIp << ":" << rtspPort << std::endl; } std::string mysqlIp, mysqlDb, mysqlUser, mysqlPassword; int mysqlPort; if (this->getMySQLConfig(mysqlIp, mysqlPort, mysqlDb, mysqlUser, mysqlPassword)) { std::cout << "Connecting to MySQL database: " << mysqlIp << ":" << mysqlPort << " - " << mysqlDb << std::endl; } std::string cnnPath; if (this->getCNNModelSavePath(cnnPath)) { std::cout << "Loading CNN model: " << cnnPath << std::endl; } std::cout << "Cold start completed." << std::endl; } void NetworkConfig::hotStart(NetworkConfig & oldParser) { std::cout << "Hot start begins..." << std::endl; std::string oldTcpIp, newTcpIp; int oldTcpPort, newTcpPort; if (oldParser.getTCPConfig(oldTcpIp, oldTcpPort) && this->getTCPConfig(newTcpIp, newTcpPort)) { if (oldTcpIp != newTcpIp || oldTcpPort != newTcpPort) { std::cout << "TCP configuration updated: " << oldTcpIp << ":" << oldTcpPort << " -> " << newTcpIp << ":" << newTcpPort << std::endl; if (setTCPConfig(newTcpIp, newTcpPort)) { std::cout << "TCP" << std::endl; std::cout << " IP: " << newTcpIp << "\n Port: " << newTcpPort << std::endl; } } } std::string oldRtspIp, newRtspIp; int oldRtspPort, newRtspPort; if (oldParser.getRTSPConfig(oldRtspIp, oldRtspPort) && this->getRTSPConfig(newRtspIp, newRtspPort)) { if (oldRtspIp != newRtspIp || oldRtspPort != newRtspPort) { std::cout << "RTSP configuration updated: " << oldRtspIp << ":" << oldRtspPort << " -> " << newRtspIp << ":" << newRtspPort << std::endl; } } std::string oldLogPath, newLogPath; int oldLogSize, newLogSize; if (oldParser.getLogConfig(oldLogPath, oldLogSize) && this->getLogConfig(newLogPath, newLogSize)) { if (oldLogPath != newLogPath || oldLogSize != newLogSize) { std::cout << "Log configuration updated: " << oldLogPath << "(" << oldLogSize << ")" << " -> " << newLogPath << "(" << newLogSize << ")" << std::endl; } } std::string oldMysqlIp, newMysqlIp, oldMysqlDb, newMysqlDb, oldMysqlUser, newMysqlUser, oldMysqlPassword, newMysqlPassword; int oldMysqlPort, newMysqlPort; if (oldParser.getMySQLConfig(oldMysqlIp, oldMysqlPort, oldMysqlDb, oldMysqlUser, oldMysqlPassword) && this->getMySQLConfig(newMysqlIp, newMysqlPort, newMysqlDb, newMysqlUser, newMysqlPassword)) { if (oldMysqlIp != newMysqlIp || oldMysqlPort != newMysqlPort || oldMysqlDb != newMysqlDb || oldMysqlUser != newMysqlUser || oldMysqlPassword != newMysqlPassword) { std::cout << "MySQL configuration updated: " << oldMysqlIp << ":" << oldMysqlPort << " - " << oldMysqlDb << " -> " << newMysqlIp << ":" << newMysqlPort << " - " << newMysqlDb << std::endl; } } std::string oldPictureRootPath, newPictureRootPath; if (oldParser.getPictureManagementRootPath(oldPictureRootPath) && this->getPictureManagementRootPath(newPictureRootPath)) { if (oldPictureRootPath != newPictureRootPath) { std::cout << "Picture management root path updated: " << oldPictureRootPath << " -> " << newPictureRootPath << std::endl; } } std::string oldVideoRootPath, newVideoRootPath; if (oldParser.getVideoManagementRootPath(oldVideoRootPath) && this->getVideoManagementRootPath(newVideoRootPath)) { if (oldVideoRootPath != newVideoRootPath) { std::cout << "Video management root path updated: " << oldVideoRootPath << " -> " << newVideoRootPath << std::endl; } } std::string oldCnnPath, newCnnPath; if (oldParser.getCNNModelSavePath(oldCnnPath) && this->getCNNModelSavePath(newCnnPath)) { if (oldCnnPath != newCnnPath) { std::cout << "CNN model save path updated: " << oldCnnPath << " -> " << newCnnPath << std::endl; } } std::string oldVersionRootPath, newVersionRootPath; if (oldParser.getVersionManagementRootPath(oldVersionRootPath) && this->getVersionManagementRootPath(newVersionRootPath)) { if (oldVersionRootPath != newVersionRootPath) { std::cout << "Version management root path updated: " << oldVersionRootPath << " -> " << newVersionRootPath << std::endl; } } std::cout << "Hot start completed." << std::endl; } bool NetworkConfig::isConfigUpdated(const std::string & xmlFilePath, std::time_t & lastModifiedTime) { struct stat fileStat; if (stat(xmlFilePath.c_str(), &fileStat) == 0) { if (fileStat.st_mtime > lastModifiedTime) { lastModifiedTime = fileStat.st_mtime; return true; } } return false; } void NetworkConfig::restartServices(StartupMode currentMode, const std::string & xmlFilePath, std::time_t & lastModifiedTime) { switch (currentMode) { case StartupMode::ColdStart: if (isConfigUpdated("Info.xml", lastModifiedTime)) { std::cout << "Configuration file parameters changed. Performing cold start to restart the entire service..." << std::endl; coldStart(); } else { std::cout << "No changes in the configuration file. Cold start is not required." << std::endl; } break; case StartupMode::HotStart: if (this->isConfigUpdated(xmlFilePath, lastModifiedTime)) { NetworkConfig oldParser(xmlFilePath); this->hotStart(oldParser); } else { std::cout << "No changes in the configuration file. Hot start is not required." << std::endl; } break; } } bool NetworkConfig::setTCPConfig(const std::string & ipAddress, int portNumber) { if (!loaded) return false; tinyxml2::XMLElement* tcpElement = doc.FirstChildElement("NetworkConfigurationInfo") ->FirstChildElement("Socket")->FirstChildElement("TCP"); if (tcpElement) { tinyxml2::XMLElement* ipElement = tcpElement->FirstChildElement("IPAddress"); if (ipElement) { ipElement->SetText(ipAddress.c_str()); } tinyxml2::XMLElement* portElement = tcpElement->FirstChildElement("PortNumber"); if (portElement) { portElement->SetText(portNumber); } return true; } return false; } Server/郭文强/code/FaceProject/FaceProject/NetworkConfig.h
Server/郭文强/code/FaceProject/FaceProject/Server_XML.cpp
Server/郭文强/code/FaceProject/FaceProject/config.xml
Server/郭文强/code/FaceProject/FaceProject/stdafx.h
Server/郭文强/code/FaceProject/FaceProject/targetver.h
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/.github/workflows/test.yml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/.gitignore
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/CMakeLists.txt
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/LICENSE.txt
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/Makefile
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/TinyXML2_small.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/cmake/tinyxml2-config.cmake
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/cmake/tinyxml2.pc.in
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/contrib/html5-printer.cpp
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/_config.yml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/_example_1.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/_example_2.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/_example_3.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/_example_4.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/annotated.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/bc_s.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/bc_sd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/bdwn.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classes.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_attribute-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_attribute.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_comment-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_comment.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_comment.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_const_handle-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_const_handle.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_declaration-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_declaration.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_declaration.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_document-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_document.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_document.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_element-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_element.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_element.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_handle-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_handle.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_node-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_node.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_node.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_printer-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_printer.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_printer.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_text-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_text.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_text.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_unknown-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_unknown.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_unknown.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_visitor-members.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_visitor.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/classtinyxml2_1_1_x_m_l_visitor.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/clipboard.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/closed.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/cookie.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doc.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doc.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/docd.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doxygen.css
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doxygen.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doxygen.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/doxygen_crawl.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/dynsections.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/files.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderclosed.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderclosed.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderclosedd.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderopen.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderopen.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/folderopend.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_b.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_c.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_d.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_e.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_f.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_b.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_c.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_d.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_e.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_f.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_g.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_h.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_i.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_l.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_n.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_o.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_p.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_q.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_r.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_s.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_t.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_u.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_v.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_func_x.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_g.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_h.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_i.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_l.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_n.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_o.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_p.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_q.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_r.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_s.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_t.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_u.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_v.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/functions_x.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/hierarchy.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/index.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/jquery.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/menu.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/menudata.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/minus.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/minusd.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/nav_f.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/nav_fd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/nav_g.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/nav_h.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/nav_hd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/open.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/pages.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/plus.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/plusd.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_0.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_0.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_1.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_1.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_10.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_10.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_11.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_11.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_12.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_12.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_13.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_13.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_14.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_2.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_2.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_3.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_3.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_4.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_4.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_5.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_5.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_6.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_6.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_7.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_7.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_8.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_8.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_9.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_9.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_a.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_a.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_b.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_b.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_c.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_c.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_d.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_d.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_e.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_e.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_f.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/all_f.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/classes_0.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/classes_0.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/close.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/close.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_0.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_0.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_1.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_1.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_10.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_10.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_11.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_11.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_12.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_12.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_13.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_13.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_2.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_2.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_3.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_3.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_4.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_4.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_5.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_5.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_6.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_6.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_7.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_7.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_8.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_8.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_9.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_9.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_a.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_a.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_b.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_b.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_c.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_c.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_d.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_d.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_e.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_e.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_f.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/functions_f.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/mag.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/mag_d.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/mag_sel.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/mag_sel.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/mag_seld.svg
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/nomatches.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_0.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_0.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_1.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_1.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_2.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_2.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_3.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_3.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_4.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_4.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_5.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_6.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_7.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_8.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_9.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_a.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_b.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/pages_c.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/search.css
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/search.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/search_l.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/search_m.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/search_r.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/search/searchdata.js
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/splitbar.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/splitbard.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/sync_off.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/sync_on.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_a.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_ad.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_b.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_bd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_h.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_hd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_s.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tab_sd.pngServer/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tabs.css
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/docs/tinyxml2_8h_source.html
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/dox
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/meson.build
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/meson_options.txt
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/readme.md
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/dream.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/empty.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/utf8test.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/utf8testverify.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/xmltest-4636783552757760.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/xmltest-5330.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/xmltest-5662204197076992.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/resources/xmltest-5720541257269248.xml
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/setversion.py
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/test/CMakeLists.txt
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/tinyxml2.cpp
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/tinyxml2.h
Server/郭文强/code/FaceProject/FaceProject/tinyxml2-master/xmltest.cpp
Server/郭文强/code/FaceProject/FaceProject/tinyxml2.h
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.Build.CppClean.log
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.log
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/CL.command.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/CL.read.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/CL.write.1.tlogBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/FaceProject.lastbuildstate
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/link.command.1.tlog
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/link.read.1.tlog
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/link.write.1.tlog
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/FaceProject.tlog/unsuccessfulbuild
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/NetworkConfig.objBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/Server_XML.objBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/tinyxml2.objBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/vc140.idbBinary files differ
Server/郭文强/code/FaceProject/FaceProject/x64/Debug/vc140.pdbBinary files differ
Server/郭文强/log/郭文强_20250311.docBinary files differ