This commit is contained in:
qingjiao 2025-12-09 19:09:12 +08:00
parent 8459eba2d6
commit dc12ef7c8c
7 changed files with 63 additions and 9 deletions

View File

@ -4,6 +4,7 @@
#include "nlohmann/json.hpp"
#include "CC.h"
#include "string"
using JSON = nlohmann::json;
// 定义用于简化json序列化和反序列化的宏
@ -13,8 +14,7 @@ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json
namespace CTL {
// 定义一个继承自nlohmann::json的JSONObject类
class JSONObject: public JSON
{
class JSONObject: public JSON{
public:
// 继承nlohmann::json的构造函数
using nlohmann::json::json;

View File

@ -133,7 +133,7 @@ void CTL::DatagramSocket::receive(DatagramPacket &packet) const {
const InetAddress address(info.IPAddress);
packet.setAddress(address);
packet.setPort(info.Port);
packet.setData(buffer.subBuffer(0,len - 1));
packet.setData(buffer.subBuffer(0,len));
packet.setLength(len);
}
}

View File

@ -84,6 +84,9 @@ public:
}
static void Function_0xA4(const DataPacket& packet){
}
static void Function_0xA7(const DataPacket& packet){
CTL::System::Println("Error: {} Str: {}",packet.Parameter1,packet.AdditionalData.toString().c_str());
}
static void Function_0xF2(const DataPacket& packet){
const auto Setting = Config::getConfig();

View File

@ -73,6 +73,13 @@ public:
taskInfo->TaskType = Json.get("TaskType");
taskInfo->ServerPort = Json.get("ServerPort");
const auto TermList = Json.get("Terms").get<CCVector<int>>();
try {
taskInfo->SendOrder = Json.get("SendOrder");
if (taskInfo->SendOrder == 1) {
taskInfo->TaskOrder = Json.get("TaskOrder").get<std::vector<char>>();
}
}
catch (...){}
for (const auto& TID : TermList) {
taskInfo->Terms.put(TID, TID);
}
@ -83,6 +90,13 @@ public:
else if (Flag == 0) {
const auto taskInfo = TaskInfo::getData(TaskID);
if (taskInfo) {
try {
taskInfo->SendOrder = Json.get("SendOrder");
if (taskInfo->SendOrder == 1) {
taskInfo->TaskOrder = Json.get("TaskOrder").get<std::vector<char>>();
}
}
catch (...){}
if (taskInfo->Type == 0 && taskInfo->pushFlowTask) {
taskInfo->pushFlowTask->stop();
}
@ -108,6 +122,13 @@ public:
for (const auto& TID : TermList) {
taskInfo->Terms.put(TID, TID);
}
try {
taskInfo->SendOrder = Task.SendOrder;
if (taskInfo->SendOrder == 1) {
taskInfo->TaskOrder = Task.TaskOrder;
}
}
catch (...){}
taskInfo->pushFlowTask = new PushFlowTask(taskInfo->TaskID);
TaskInfo::Start(taskInfo);
taskInfo->pushFlowTask->start();

View File

@ -23,14 +23,18 @@ void Routing::RoutingFunction(const DataPacket &packet) {
R_Order_AA::Function_0xAA(packet);
break;
}
case 0xC1: {
R_Order_AA::Function_0xC1(packet);
break;
}
case 0xA4: {
R_Order_AA::Function_0xA4(packet);
break;
}
case 0xA7: {
R_Order_AA::Function_0xA7(packet);
break;
}
case 0xC1: {
R_Order_AA::Function_0xC1(packet);
break;
}
case 0xF2: {
R_Order_AA::Function_0xF2(packet);
break;

View File

@ -57,7 +57,7 @@ void TaskInfo::InitSocket() {
}
}
else {
CTL::Thread::SleepMS(5);
CTL::Thread::Sleep(300);
}
}
{
@ -69,12 +69,34 @@ void TaskInfo::InitSocket() {
void TaskInfo::Start(TaskInfo *taskInfo) {
TaskInfoMap.put(taskInfo->TaskID,taskInfo);
const auto Aim = new AIMInfo;
CTL::AutoDestruct AimDestruct(Aim);
Aim->Data = CTL::ByteArray(taskInfo->TaskOrder.data(),taskInfo->TaskOrder.size());
for (const auto &ID : taskInfo->Terms) {
const auto term = Terminal::getData(ID.first);
if (term) {
Aim->IP = term->IP;
Aim->Port = term->Port;
Transmitter::Send_Massage(Aim);
}
}
}
void TaskInfo::Stop(const int TaskID) {
const auto taskInfo = getData(TaskID);
if (taskInfo) {
taskInfo->Flag = 0;
const auto Aim = new AIMInfo;
CTL::AutoDestruct AimDestruct(Aim);
Aim->Data = CTL::ByteArray(taskInfo->TaskOrder.data(),taskInfo->TaskOrder.size());
for (const auto &ID : taskInfo->Terms) {
const auto term = Terminal::getData(ID.first);
if (term) {
Aim->IP = term->IP;
Aim->Port = term->Port;
Transmitter::Send_Massage(Aim);
}
}
}
TaskInfoMap.Remove(TaskID);
}

View File

@ -7,13 +7,15 @@
#include "PushFlowTask.h"
struct Dist_Tasks {
JSON_TYPE_INTRUSIVE(Dist_Tasks,TaskID,TaskType,Terms,AimIP,AimPort,ServerPort);
JSON_TYPE_INTRUSIVE(Dist_Tasks,TaskID,TaskType,Terms,AimIP,AimPort,ServerPort,SendOrder,TaskOrder);
int TaskID = -1;
int TaskType = 0;
CTL::String AimIP;
int AimPort = 10062;
int ServerPort = 10060;
CCVector<int> Terms;
int SendOrder = 0;
std::vector<char> TaskOrder{};
};
class TaskInfo {
@ -30,6 +32,8 @@ public:
int TaskID = -1;
int TaskType = 0;
int ServerPort = 10060;
int SendOrder = 0;
std::vector<char> TaskOrder{};
CTL::Map<int, int> Terms;
PushFlowTask* pushFlowTask = nullptr;
private: