Explorar o código

增加主从模式EXE启动模式

xx %!s(int64=2) %!d(string=hai) anos
pai
achega
2871b62cbc
Modificáronse 5 ficheiros con 119 adicións e 3 borrados
  1. 1 1
      CMakeLists.txt
  2. 1 1
      src/module/process.cpp
  3. 33 1
      tests/main.cpp
  4. 53 0
      tests/slave.cpp
  5. 31 0
      tests/slave.h

+ 1 - 1
CMakeLists.txt

@@ -9,7 +9,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 if(MSVC)
 	set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Build config types" FORCE)
 endif()  
-# C++等级
+# C++等级 
 set(CMAKE_CXX_STANDARD 20)  
 set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
 set(FASTWEBCORE ${PROJECT_NAME}core)

+ 1 - 1
src/module/process.cpp

@@ -41,7 +41,7 @@ size_t module::process::create(const std::string& filepath, const std::string& w
     }
 
     size_t pid = 0;
-    if (ylib::process::create(filepath, working_directory, vs_args, wait_close, show_window, &pid) == false)
+    if (ylib::process::create(filepath, working_directory, vs_args, wait_close, show_window,nullptr,&pid) == false)
         return 0;
     return pid;
 }

+ 33 - 1
tests/main.cpp

@@ -32,6 +32,8 @@
 #include <filesystem>
 #include "util/file.h"
 #include "util/strutils.h"
+#include "util/system.h"
+#include "slave.h"
 #define QUIT_WAIT 				std::cout << "Please exit after entering any character...";std::cin.get();return -1
 
 void* start(const char* config_filepath)
@@ -99,6 +101,36 @@ int main(int argc, char* argv[])
 			QUIT_WAIT;
 		}
 	}
+	else if (type == "start2")
+	{
+		if (ylib::file::exist(std::filesystem::absolute(value).string()))
+		{
+			app = start(std::filesystem::absolute(value).string().c_str());
+			if (app == nullptr)
+				return -1;
+			while (true)
+				system::sleep_msec(1000 * 60);
+		}
+		else
+			return -1;
+	}
+	else if (type == "fastwebmanager")
+	{
+		int flag = ylib::stoi(argv[2]);
+		slave s("fastweb_shardmemory", flag);
+
+		app = start(argv[3]);
+		if (app == nullptr)
+		{
+			s.write(1);
+			return -1;
+		}
+		s.write(2);
+		// 等待关闭信号
+		s.wait();
+
+		return 0;
+	}
 	if (argc < 4) { ouput_help(); QUIT_WAIT; }
 
 	if (type == "create")
@@ -113,5 +145,5 @@ int main(int argc, char* argv[])
 			ylib::file::copy_dir("/usr/local/share/fastweb", path);
 		}
 	}
-	return 0;
+	return -1;
 }

+ 53 - 0
tests/slave.cpp

@@ -0,0 +1,53 @@
+// MIT License
+// Copyright(c) 2024 FastWeb - fwlua.com - nianhua
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files(the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions :
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+// ## Additional Terms for Commercial Use
+// This software is licensed for personal, educational, and non - commercial use.
+// For commercial use or use within a company, organization, or institution, a
+// separate commercial license is required.To obtain a commercial license,
+// please contact
+// EMail:1585346868@qq.com
+// Mobile:17367918735
+// QQ:1585346868
+
+#include "slave.h"
+#include "util/system.h"
+
+
+slave::slave(const std::string& name,int flag):m_flag(flag)
+{
+	m_sm = std::make_unique<ylib::sharedmem>(false);
+	if (m_sm->create(name, 128 * 2) == false)
+	{
+		std::cerr << m_sm->last_error() << std::endl;
+		abort();
+	}
+}
+slave::~slave()
+{
+	m_sm->destory();
+}
+void slave::wait()
+{
+	while ((*m_sm)[m_flag] == 0)
+		system::sleep_msec(10);
+}
+
+void slave::write(uchar data)
+{
+	((char*)m_sm->mem())[m_flag+128] = data;
+}

+ 31 - 0
tests/slave.h

@@ -0,0 +1,31 @@
+#pragma once
+#include <tuple>
+#include <memory>
+#include "util/thread.h"
+#include "util/sharedmem.h"
+#include "net/udp_node.h"
+#include "base/error.h"
+/// <summary>
+/// 从设备
+/// </summary>
+class slave:public ylib::error_base
+{
+public:
+	slave(const std::string& name,int flag);
+	~slave();
+	/// <summary>
+	/// 等待
+	/// </summary>
+	void wait();
+	/// <summary>
+	/// 写入
+	/// </summary>
+	/// <param name="data"></param>
+	void write(uchar data);
+private:
+	std::string m_name;
+	// 共享内存
+	std::unique_ptr<ylib::sharedmem> m_sm;
+	// 标记
+	int m_flag = -1;
+};