增加主从模式EXE启动模式

This commit is contained in:
xx
2024-06-12 02:19:02 +08:00
parent 6c5bcca84b
commit 6b3be04eb2
5 changed files with 119 additions and 3 deletions

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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
tests/slave.cpp Normal file
View File

@@ -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
// EMail1585346868@qq.com
// Mobile17367918735
// QQ1585346868
#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
tests/slave.h Normal file
View File

@@ -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;
};