From 904c7b0b894c812f641c98d026b845c8d64f4df4 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 15 May 2025 10:49:13 +0800 Subject: [PATCH 01/22] update:depend library --- XEngine_Source/XEngine_Depend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 865c50f..5bc8164 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 865c50f5199f3330ba8a3df48c6397363993fd36 +Subproject commit 5bc816462c2c1f04e282ecce6c4c12db0ec11029 -- Gitee From 0feaa237f7859174c30843567d8cd81cb81a296f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 19 May 2025 13:57:16 +0800 Subject: [PATCH 02/22] ci:added debian and fedora system support ci:improved build --- .github/workflows/RockyArm64_build.yml | 82 -------------- ...{RockyX86_64_build.yml => Rocky_build.yml} | 51 ++++----- ...buntux86_64_build.yml => Ubuntu_build.yml} | 54 +++++++-- ...UbuntuArm64_build.yml => debian_build.yml} | 106 ++++++++++-------- .github/workflows/fedora_build.yml | 100 +++++++++++++++++ .github/workflows/macbuild.yml | 14 +-- .github/workflows/release.yml | 16 +-- 7 files changed, 244 insertions(+), 179 deletions(-) delete mode 100644 .github/workflows/RockyArm64_build.yml rename .github/workflows/{RockyX86_64_build.yml => Rocky_build.yml} (68%) rename .github/workflows/{Ubuntux86_64_build.yml => Ubuntu_build.yml} (60%) rename .github/workflows/{UbuntuArm64_build.yml => debian_build.yml} (31%) create mode 100644 .github/workflows/fedora_build.yml diff --git a/.github/workflows/RockyArm64_build.yml b/.github/workflows/RockyArm64_build.yml deleted file mode 100644 index 2c52119..0000000 --- a/.github/workflows/RockyArm64_build.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: rocky Arm64 build workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-24.04 - env: - IMAGE_NAME: rockylinux/rockylinux:9.5 - - strategy: - fail-fast: false - matrix: - arch: [linux/arm64] - - steps: - # 检出您的主仓库代码 - - name: Checkout main repository code - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Build ${{ matrix.arch }} - run: | - docker run --platform ${{ matrix.arch }} --rm \ - -v ${{ github.workspace }}:/workspace \ - -w /workspace ${{ env.IMAGE_NAME }} /bin/sh -c ' - set -e - dnf update -y - dnf install --allowerasing git make g++ wget curl jq unzip -y - - git config --global --add safe.directory /workspace - git submodule init - git submodule update - - latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_RockyLinux_9_Arm64.zip - unzip ./XEngine_RockyLinux_9_Arm64.zip -d ./XEngine_RockyLinux_9_Arm64 - cd XEngine_RockyLinux_9_Arm64 - - chmod 777 ./XEngine_LINEnv.sh - ./XEngine_LINEnv.sh -i 0 - - dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y - - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/lib64 \; - ldconfig - cd .. - - cd XEngine_Source - make ARCH=Arm64 RELEASE=1 - make FLAGS=InstallAll - make FLAGS=CleanAll - cd .. - - cd XEngine_Release - chmod 777 copydb.sh - ./copydb.sh - ./XEngine_APIServiceApp -t - chown -R $(id -u):$(id -g) . - chmod -R a+r . ' - - - name: Upload folder as artifact with RockyLinux - uses: actions/upload-artifact@v4 - with: - name: XEngine_APIServiceApp-RockyLinux_9_Arm64 - path: XEngine_Release/ - retention-days: 1 diff --git a/.github/workflows/RockyX86_64_build.yml b/.github/workflows/Rocky_build.yml similarity index 68% rename from .github/workflows/RockyX86_64_build.yml rename to .github/workflows/Rocky_build.yml index b856786..332f154 100644 --- a/.github/workflows/RockyX86_64_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -1,4 +1,4 @@ -name: rocky x86_64 build workflows +name: rocky build workflows on: push: @@ -14,18 +14,28 @@ permissions: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ matrix.runner }} container: image: rockylinux/rockylinux:9.5 + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 + - arch: arm64 + runner: ubuntu-24.04-arm + platform: linux/arm64 + artifact: Arm64 steps: - # 检出您的主仓库代码 - name: Checkout main repository code uses: actions/checkout@v4 with: ref: 'develop' - # 检出依赖的xengine仓库到指定的xengine目录 - name: Checkout dependency repository (xengine) uses: actions/checkout@v4 with: @@ -48,31 +58,24 @@ jobs: repository: libxengine/XEngine_IPMacData path: XEngine_Source/XEngine_DBDepend/XEngine_IPMacData + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: install system package run: | dnf update -y - ls -al ./XEngine_Source/XEngine_DBDepend/ - ls -al ./XEngine_Source/XEngine_DBDepend/XEngine_IPMacData/XEngine_Source - dnf install gcc g++ make git jq unzip -y - # 设置依赖库的环境变量 - - name: Set up Dependency rocky linux Environment - run: | - cd libxengine - chmod 777 * - ./XEngine_LINEnv.sh -i 0 + dnf install gcc g++ make git jq unzip wget -y dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y - + - name: install xengine library - run: | + run: | latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_RockyLinux_9_x86-64.zip - unzip ./XEngine_RockyLinux_9_x86-64.zip -d ./XEngine_RockyLinux_9_x86-64 - cd XEngine_RockyLinux_9_x86-64 + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_RockyLinux_9_${{ matrix.artifact }}.zip + unzip ./XEngine_RockyLinux_9_${{ matrix.artifact }}.zip -d ./XEngine_RockyLinux_9_${{ matrix.artifact }} + cd XEngine_RockyLinux_9_${{ matrix.artifact }} - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/lib64 \; - ldconfig - + chmod 777 * + ./XEngine_LINEnv.sh -i 3 - name: make run: | cd XEngine_Source @@ -87,13 +90,11 @@ jobs: - name: test run: | cd XEngine_Release - chmod 777 copydb.sh - ./copydb.sh ./XEngine_APIServiceApp -t - name: Upload folder as artifact with RockyLinux uses: actions/upload-artifact@v4 with: - name: XEngine_APIServiceApp-RockyLinux_9_x86_64 + name: XEngine_APIServiceApp-RockyLinux_9_${{ matrix.artifact }} path: XEngine_Release/ retention-days: 1 diff --git a/.github/workflows/Ubuntux86_64_build.yml b/.github/workflows/Ubuntu_build.yml similarity index 60% rename from .github/workflows/Ubuntux86_64_build.yml rename to .github/workflows/Ubuntu_build.yml index 54c494f..bbf6b5a 100644 --- a/.github/workflows/Ubuntux86_64_build.yml +++ b/.github/workflows/Ubuntu_build.yml @@ -1,4 +1,4 @@ -name: ubuntu x86_64 build workflows +name: ubuntu build workflows on: push: @@ -19,6 +19,8 @@ jobs: include: - os: ubuntu-22.04 - os: ubuntu-24.04 + - os: ubuntu-22.04-arm + - os: ubuntu-24.04-arm runs-on: ${{ matrix.os }} steps: @@ -46,7 +48,9 @@ jobs: sudo apt upgrade -y sudo apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y - # 设置依赖库的环境变量 + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: Set up Dependency ubuntu24.04 Environment if: matrix.os == 'ubuntu-24.04' run: | @@ -56,19 +60,34 @@ jobs: - name: Set up Dependency ubuntu22.04 Environment if: matrix.os == 'ubuntu-22.04' run: | - cd libxengine - chmod 777 * - sudo ./XEngine_LINEnv.sh -i 0 - latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_22.04_x86-64.zip unzip ./XEngine_UBuntu_22.04_x86-64.zip -d ./XEngine_UBuntu_22.04_x86-64 cd XEngine_UBuntu_22.04_x86-64 - sudo cp -rf ./XEngine_Include /usr/local/include - sudo find ./XEngine_Linux -name "*.so" -exec cp {} /usr/local/lib \; - sudo ldconfig - #编译 + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu22.04 Environment + if: matrix.os == 'ubuntu-22.04-arm' + run: | + latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_22.04_Arm64.zip + unzip ./XEngine_UBuntu_22.04_Arm64.zip -d ./XEngine_UBuntu_22.04_Arm64 + cd XEngine_UBuntu_22.04_Arm64 + + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu22.04 Environment + if: matrix.os == 'ubuntu-24.04-arm' + run: | + latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_24.04_Arm64.zip + unzip ./XEngine_UBuntu_24.04_Arm64.zip -d ./XEngine_UBuntu_24.04_Arm64 + cd XEngine_UBuntu_24.04_Arm64 + + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: make run: | cd XEngine_Source @@ -94,11 +113,24 @@ jobs: name: XEngine_APIServiceApp-Ubuntu_22.04_x86_64 path: XEngine_Release/ retention-days: 1 - - name: Upload folder as artifact with ubuntu24.04 if: matrix.os == 'ubuntu-24.04' uses: actions/upload-artifact@v4 with: name: XEngine_APIServiceApp-Ubuntu_24.04_x86_64 path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu22.04-arm + if: matrix.os == 'ubuntu-22.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_APIServiceApp-Ubuntu_22.04_Arm64 + path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu24.04-arm + if: matrix.os == 'ubuntu-24.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_APIServiceApp-Ubuntu_24.04_Arm64 + path: XEngine_Release/ retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/UbuntuArm64_build.yml b/.github/workflows/debian_build.yml similarity index 31% rename from .github/workflows/UbuntuArm64_build.yml rename to .github/workflows/debian_build.yml index 8500750..94ee772 100644 --- a/.github/workflows/UbuntuArm64_build.yml +++ b/.github/workflows/debian_build.yml @@ -1,77 +1,95 @@ -name: ubuntu Arm64 build workflows +name: debian build workflows on: push: - branches: + branches: - 'develop' paths: - 'XEngine_Source/**' - 'XEngine_Release/**' - '.github/**' - + +permissions: + contents: read + jobs: build: - runs-on: ubuntu-24.04 - env: - IMAGE_NAME: ubuntu:24.04 - + runs-on: ${{ matrix.runner }} + container: + image: debian:bookworm + options: --platform ${{ matrix.platform }} strategy: - fail-fast: false matrix: - arch: [linux/arm64] + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + artifact: x86-64 steps: - name: Checkout main repository code uses: actions/checkout@v4 with: ref: 'develop' - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Build ${{ matrix.arch }} + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (XEngine_OPenSource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + - name: sub module checkout (XEngine_PhoneData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_PhoneData + path: XEngine_Source/XEngine_DBDepend/XEngine_PhoneData + - name: sub module checkout (XEngine_IPMacData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_IPMacData + path: XEngine_Source/XEngine_DBDepend/XEngine_IPMacData + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: install system package run: | - docker run --platform ${{ matrix.arch }} --rm \ - -v ${{ github.workspace }}:/workspace \ - -w /workspace ${{ env.IMAGE_NAME }} /bin/sh -c ' - set -e apt update -y - apt install git make g++ wget curl jq unzip -y apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y - git config --global --add safe.directory /workspace - git submodule init - git submodule update - + - name: install xengine library + run: | latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_UBuntu_24.04_Arm64.zip - unzip ./XEngine_UBuntu_24.04_Arm64.zip -d ./XEngine_UBuntu_24.04_Arm64 - cd XEngine_UBuntu_24.04_Arm64 - - chmod 777 ./XEngine_LINEnv.sh - ./XEngine_LINEnv.sh -i 0 - - cp -rf ./XEngine_Include /usr/local/include - find ./XEngine_Linux -name "*.so" -exec cp {} /usr/local/lib \; - ldconfig - cd .. - + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Debian_12_${{ matrix.artifact }}.zip + unzip ./XEngine_Debian_12_${{ matrix.artifact }}.zip -d ./XEngine_Debian_12_${{ matrix.artifact }} + cd XEngine_Debian_12_${{ matrix.artifact }} + + chmod 777 * + ./XEngine_LINEnv.sh -i 3 + - name: make + run: | cd XEngine_Source - make ARCH=Arm64 RELEASE=1 + make make FLAGS=InstallAll - make FLAGS=CleanAll - cd .. + make FLAGS=CleanAll + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | cd XEngine_Release - chmod 777 copydb.sh - ./copydb.sh - ./XEngine_APIServiceApp -t - chown -R $(id -u):$(id -g) . - chmod -R a+r . ' + ./XEngine_APIServiceApp -t - - name: Upload folder as artifact with ubuntu Arm64 + - name: Upload folder as artifact uses: actions/upload-artifact@v4 with: - name: XEngine_APIServiceApp-Ubuntu_24.04_Arm64 + name: XEngine_APIServiceApp-Debian_12_x86-64 path: XEngine_Release/ retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/fedora_build.yml b/.github/workflows/fedora_build.yml new file mode 100644 index 0000000..8e4110e --- /dev/null +++ b/.github/workflows/fedora_build.yml @@ -0,0 +1,100 @@ +name: fedora build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: fedora:${{ matrix.fedora-version }} + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + fedora-version: 42 + artifact: x86-64 + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + fedora-version: 41 + artifact: x86-64 + + steps: + - name: Checkout main repository code + uses: actions/checkout@v4 + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (XEngine_OPenSource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + - name: sub module checkout (XEngine_PhoneData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_PhoneData + path: XEngine_Source/XEngine_DBDepend/XEngine_PhoneData + - name: sub module checkout (XEngine_IPMacData) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_IPMacData + path: XEngine_Source/XEngine_DBDepend/XEngine_IPMacData + + - name: install system package + run: | + dnf update -y + dnf install gcc g++ make git jq unzip wget -y + apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: install xengine library + run: | + latest_tag=$(curl -s https://api.github.com/repos/libxengine/libxengine/releases/latest | jq -r .tag_name) + wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }}.zip + unzip ./XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }}.zip -d ./XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + cd XEngine_Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + + chmod 777 * + ./XEngine_LINEnv.sh -i 3 + - name: make + run: | + cd XEngine_Source + make + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_APIServiceApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v4 + with: + name: XEngine_APIServiceApp-Fedora_${{ matrix.fedora-version }}_${{ matrix.artifact }} + path: XEngine_Release/ + retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/macbuild.yml b/.github/workflows/macbuild.yml index 5e494df..b93d2e4 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -40,6 +40,9 @@ jobs: run: | brew install lua opencv qrencode + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: Set up Dependency x86_64 Environment if: matrix.os == 'macos-13' run: | @@ -49,20 +52,13 @@ jobs: - name: Set up Dependency Arm64 Environment if: matrix.os == 'macos-14' run: | - cd libxengine - chmod 777 * - ./XEngine_LINEnv.sh -i 0 - latest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/libxengine/libxengine.git | awk '{print $2}' | sed 's/refs\/tags\///' | tail -n 1) - wget https://github.com/libxengine/libxengine/releases/download/$latest_tag/XEngine_Mac_Arm64.zip unzip ./XEngine_Mac_Arm64.zip -d ./XEngine_Mac_Arm64 cd XEngine_Mac_Arm64 - sudo mkdir -p /usr/local/include - sudo mkdir -p /usr/local/lib - sudo cp -rf ./XEngine_Include /usr/local/include - sudo find ./XEngine_Mac -name "*.dylib" -exec cp {} /usr/local/lib \; + chmod 777 * + ./XEngine_LINEnv.sh -i 3 - name: make debug run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eb8898b..87c7351 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,37 +16,37 @@ jobs: with: fetch-depth: 0 - - name: Download ubuntu x86_64 build + - name: Download ubuntu build uses: dawidd6/action-download-artifact@v6 with: - workflow: Ubuntux86_64_build.yml + workflow: Ubuntu_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download ubuntu Arm64 build + - name: Download debian build uses: dawidd6/action-download-artifact@v6 with: - workflow: UbuntuArm64_build.yml + workflow: debian_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download rocky x86_64 build + - name: Download fedora build uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyX86_64_build.yml + workflow: fedora_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download rocky Arm64 build + - name: Download Rocky build uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyArm64_build.yml + workflow: Rocky_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true -- Gitee From a0cda44163d687f365bbdd5241e27d9f6776ea50 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 19 May 2025 14:53:29 +0800 Subject: [PATCH 03/22] ci:build fix --- .github/workflows/Rocky_build.yml | 5 ++++- .github/workflows/debian_build.yml | 1 + .github/workflows/fedora_build.yml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Rocky_build.yml b/.github/workflows/Rocky_build.yml index 332f154..f5333e4 100644 --- a/.github/workflows/Rocky_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -65,7 +65,6 @@ jobs: run: | dnf update -y dnf install gcc g++ make git jq unzip wget -y - dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y - name: install xengine library run: | @@ -76,6 +75,10 @@ jobs: chmod 777 * ./XEngine_LINEnv.sh -i 3 + + - name: install build package + run: | + dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y - name: make run: | cd XEngine_Source diff --git a/.github/workflows/debian_build.yml b/.github/workflows/debian_build.yml index 94ee772..73354f7 100644 --- a/.github/workflows/debian_build.yml +++ b/.github/workflows/debian_build.yml @@ -60,6 +60,7 @@ jobs: - name: install system package run: | apt update -y + apt install gcc g++ make git jq unzip curl wget -y apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y - name: install xengine library diff --git a/.github/workflows/fedora_build.yml b/.github/workflows/fedora_build.yml index 8e4110e..32b105c 100644 --- a/.github/workflows/fedora_build.yml +++ b/.github/workflows/fedora_build.yml @@ -62,7 +62,7 @@ jobs: run: | dnf update -y dnf install gcc g++ make git jq unzip wget -y - apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y + dnf install lua-devel opencv-devel qrencode-devel leptonica-devel tesseract-devel -y - name: Set TERM variable run: echo "TERM=xterm" >> $GITHUB_ENV -- Gitee From 0eaf1bce3c13c680363ba660255b506b2f515e51 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 19 May 2025 15:29:23 +0800 Subject: [PATCH 04/22] ci:fixed running shell --- .github/workflows/Rocky_build.yml | 2 ++ .github/workflows/codeql.yml | 3 +++ .github/workflows/debian_build.yml | 2 ++ .github/workflows/fedora_build.yml | 2 ++ .github/workflows/msbuild.yml | 4 +++- 5 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Rocky_build.yml b/.github/workflows/Rocky_build.yml index f5333e4..f5e43dc 100644 --- a/.github/workflows/Rocky_build.yml +++ b/.github/workflows/Rocky_build.yml @@ -93,6 +93,8 @@ jobs: - name: test run: | cd XEngine_Release + chmod 777 copydb.sh + ./copydb.sh ./XEngine_APIServiceApp -t - name: Upload folder as artifact with RockyLinux diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 6e30ff1..8458037 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -46,6 +46,9 @@ jobs: sudo apt upgrade -y sudo apt install liblua5.4-dev libopencv-dev libopencv-contrib-dev libqrencode-dev libleptonica-dev libtesseract-dev -y + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: Set up Dependency Environment run: | cd libxengine diff --git a/.github/workflows/debian_build.yml b/.github/workflows/debian_build.yml index 73354f7..0c687c6 100644 --- a/.github/workflows/debian_build.yml +++ b/.github/workflows/debian_build.yml @@ -86,6 +86,8 @@ jobs: - name: test run: | cd XEngine_Release + chmod 777 copydb.sh + ./copydb.sh ./XEngine_APIServiceApp -t - name: Upload folder as artifact diff --git a/.github/workflows/fedora_build.yml b/.github/workflows/fedora_build.yml index 32b105c..1cca796 100644 --- a/.github/workflows/fedora_build.yml +++ b/.github/workflows/fedora_build.yml @@ -90,6 +90,8 @@ jobs: - name: test run: | cd XEngine_Release + chmod 777 copydb.sh + ./copydb.sh ./XEngine_APIServiceApp -t - name: Upload folder as artifact diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml index eb027b2..2d715da 100644 --- a/.github/workflows/msbuild.yml +++ b/.github/workflows/msbuild.yml @@ -130,7 +130,7 @@ jobs: cd XEngine_Release ./copydb.bat ./VSCopy_x86.bat - # ./XEngine_HttpApp.exe -t + ./XEngine_HttpApp.exe -t - name: Conditional Step for x64 Release if: matrix.configuration == 'Release' && matrix.platform == 'x64' run: | @@ -140,6 +140,7 @@ jobs: cd XEngine_Release ./copydb.bat ./VSCopy_x64.bat + ./XEngine_HttpApp.exe -t shell: pwsh - name: Conditional Step for ARM64 Release if: matrix.configuration == 'Release' && matrix.platform == 'ARM64' @@ -150,6 +151,7 @@ jobs: cd XEngine_Release ./copydb.bat ./VSCopy_Arm64.bat + ./XEngine_HttpApp.exe -t shell: pwsh - name: Upload folder as artifact with x86 -- Gitee From e02ec7a39c84f48563d4010a963520cf42d67bb4 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 24 May 2025 14:18:08 +0800 Subject: [PATCH 05/22] improved:make file build flags --- XEngine_Source/Makefile | 69 +++++++++---------- .../XEngine_ModuleConfigure/Makefile | 19 ++--- .../XEngine_ModuleDatabase/Makefile | 19 ++--- XEngine_Source/XEngine_ModuleHelp/Makefile | 19 ++--- XEngine_Source/XEngine_ModulePlugin/Makefile | 22 ++---- .../XEngine_ModuleProtocol/Makefile | 19 ++--- XEngine_Source/XEngine_ModuleSystem/Makefile | 19 ++--- .../ModulePlugin_BMIndex/Makefile | 20 ++---- .../ModulePlugin_Meter/Makefile | 20 ++---- .../ModulePlugin_Password/Makefile | 19 ++--- .../ModulePlugin_Timezone/Makefile | 19 ++--- .../ModulePlugin_Zodiac/Makefile | 19 ++--- .../XEngine_HttpApp/Makefile | 15 ++-- 13 files changed, 106 insertions(+), 192 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 25544f7..302d85a 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -25,12 +25,6 @@ APIMODULE_IPMAC_PATH = ./XEngine_DBDepend/XEngine_IPMacData/XEngine_Source/XEngi APP_HTTP_PATH = ./XEngine_ServiceApp/XEngine_HttpApp -ifeq ($(PLATFORM),linux) - FILEEXT = so -else ifeq ($(PLATFORM),mac) - FILEEXT = dylib -endif - XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleSystem.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \ libModulePlugin_Zodiac.so libModulePlugin_Password.so libModulePlugin_Timezone.so libModulePlugin_BMIndex.so libModulePlugin_Meter.so \ @@ -40,55 +34,60 @@ XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ .PHONY:MakeAll MakeAll:$(XENGINE_MODULES) -libXEngine_ModuleConfigure.so: - make -C $(MODULE_CONFIGURE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) -libXEngine_ModuleDatabase.so: - make -C $(MODULE_DATABASE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) -libXEngine_ModuleProtocol.so: - make -C $(MODULE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) $(FLAGS) -libXEngine_ModuleSystem.so: - make -C $(MODULE_SYSTEM_PATH) PLATFORM=$(PLATFORM) $(FLAGS) -libXEngine_ModuleHelp.so: - make -C $(MODULE_HELP_PATH) PLATFORM=$(PLATFORM) $(FLAGS) -libXEngine_ModulePlugin.so: - make -C $(MODULE_PLUGIN_PATH) PLATFORM=$(PLATFORM) $(FLAGS) - -libModulePlugin_Zodiac.so: - make -C $(PLUGIN_MODULE_ZODIAC) PLATFORM=$(PLATFORM) $(FLAGS) -libModulePlugin_Password.so: - make -C $(PLUGIN_MODULE_PASSWORD) PLATFORM=$(PLATFORM) $(FLAGS) -libModulePlugin_Timezone.so: - make -C $(PLUGIN_MODULE_TIMEZONE) PLATFORM=$(PLATFORM) $(FLAGS) -libModulePlugin_BMIndex.so: - make -C $(PLUGIN_MODULE_BMINDEX) PLATFORM=$(PLATFORM) $(FLAGS) -libModulePlugin_Meter.so: - make -C $(PLUGIN_MODULE_METER) PLATFORM=$(PLATFORM) $(FLAGS) +ifeq ($(PLATFORM),linux) + FILEEXT = so +else ifeq ($(PLATFORM),mac) + FILEEXT = dylib +endif libjsoncpp.so: ifeq ($(FLAGS), InstallAll) cp $(THIRDPART_MODULE_JSONCPP)/libjsoncpp.$(FILEEXT) ../XEngine_Release/ else - make -C $(THIRDPART_MODULE_JSONCPP) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(THIRDPART_MODULE_JSONCPP) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif libXEngine_InfoReport.so: ifeq ($(FLAGS), InstallAll) cp $(THIRDPART_MODULE_REPORT)/libXEngine_InfoReport.$(FILEEXT) ../XEngine_Release/ else - make -C $(THIRDPART_MODULE_REPORT) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(THIRDPART_MODULE_REPORT) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif - libXEngine_APIModulePhone.so: ifeq ($(FLAGS), InstallAll) cp $(APIMODULE_PHONE_PATH)/libXEngine_APIModulePhone.$(FILEEXT) ../XEngine_Release/ else - make -C $(APIMODULE_PHONE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(APIMODULE_PHONE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif libXEngine_APIModuleIPMac.so: ifeq ($(FLAGS), InstallAll) cp $(APIMODULE_IPMAC_PATH)/libXEngine_APIModuleIPMac.$(FILEEXT) ../XEngine_Release/ else - make -C $(APIMODULE_IPMAC_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(APIMODULE_IPMAC_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) endif + +libXEngine_ModuleConfigure.so: + make -C $(MODULE_CONFIGURE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libXEngine_ModuleDatabase.so: + make -C $(MODULE_DATABASE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libXEngine_ModuleProtocol.so: + make -C $(MODULE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libXEngine_ModuleSystem.so: + make -C $(MODULE_SYSTEM_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libXEngine_ModuleHelp.so: + make -C $(MODULE_HELP_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libXEngine_ModulePlugin.so: + make -C $(MODULE_PLUGIN_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) + +libModulePlugin_Zodiac.so: + make -C $(PLUGIN_MODULE_ZODIAC) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libModulePlugin_Password.so: + make -C $(PLUGIN_MODULE_PASSWORD) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libModulePlugin_Timezone.so: + make -C $(PLUGIN_MODULE_TIMEZONE) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libModulePlugin_BMIndex.so: + make -C $(PLUGIN_MODULE_BMINDEX) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) +libModulePlugin_Meter.so: + make -C $(PLUGIN_MODULE_METER) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) XEngine_HttpApp.exe: - make -C $(APP_HTTP_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(APP_HTTP_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) diff --git a/XEngine_Source/XEngine_ModuleConfigure/Makefile b/XEngine_Source/XEngine_ModuleConfigure/Makefile index 8ef323f..7a4990d 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/Makefile +++ b/XEngine_Source/XEngine_ModuleConfigure/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp LIB = -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = ModuleConfigure_Json.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_ModuleDatabase/Makefile b/XEngine_Source/XEngine_ModuleDatabase/Makefile index 9dc1c98..dd184a2 100644 --- a/XEngine_Source/XEngine_ModuleDatabase/Makefile +++ b/XEngine_Source/XEngine_ModuleDatabase/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LOADSO = LIB = -lXEngine_BaseLib -lHelpComponents_DataBase @@ -13,31 +9,29 @@ LIBEX = OBJECTS = ModuleDatabase_IDCard.o ModuleDatabase_Bank.o ModuleDatabase_ZIPCode.o ModuleDatabase_XLog.o ModuleDatabase_ShortLink.o ModuleDatabase_WordFilter.o ModuleDatabase_Machine.o ModuleDatabase_OilInfo.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_ModuleHelp/Makefile b/XEngine_Source/XEngine_ModuleHelp/Makefile index 53ac724..ea007a6 100644 --- a/XEngine_Source/XEngine_ModuleHelp/Makefile +++ b/XEngine_Source/XEngine_ModuleHelp/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I /usr/include/opencv4 -I /usr/local/include/opencv4 -I /usr/local/include/lua LOADSO = LIB = -lXEngine_BaseLib -lXClient_Socket -lNetHelp_APIAddr @@ -23,31 +19,29 @@ ifeq ($(MACRO_OPENCV_SUPPORT),1) endif ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -56,7 +50,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LOADHDR += -I /opt/homebrew/opt/leptonica/include -I /opt/homebrew/opt/opencv/include/opencv4 -I /opt/homebrew/opt/tesseract/include -I /opt/homebrew/opt/qrencode/include LOADSO += -L /opt/homebrew/opt/leptonica/lib -L /opt/homebrew/opt/opencv/lib -L /opt/homebrew/opt/tesseract/lib -L /opt/homebrew/opt/qrencode/lib diff --git a/XEngine_Source/XEngine_ModulePlugin/Makefile b/XEngine_Source/XEngine_ModulePlugin/Makefile index 8f77d77..43b6e93 100644 --- a/XEngine_Source/XEngine_ModulePlugin/Makefile +++ b/XEngine_Source/XEngine_ModulePlugin/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I /usr/include/lua5.4 -I /usr/local/include/lua LOADSO = LIB = -lXEngine_BaseLib @@ -15,32 +11,30 @@ OBJECTS = ModulePlugin_LibCore.o ModulePlugin_LuaCore.o ModulePlugin_Loader.o pc MACRO_LUA_SUPPORT := $(shell gcc -E -dM ../XEngine_BuildSwitch.h | grep _XENGINE_BUILD_SWITCH_LUA | cut -d ' ' -f 3) ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos LIB += -llua else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu LIB += -llua5.4 endif FILEEXT = so @@ -50,13 +44,10 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib - LOADHDR += -I /opt/homebrew/opt/lua/include/lua LOADSO += -L /opt/homebrew/opt/lua/lib - ifeq ($(MACRO_LUA_SUPPORT),1) LIB += -llua endif @@ -64,7 +55,6 @@ else ifeq ($(PLATFORM),mac) LOADBIN = -Wl,-rpath,@loader_path/./ endif - all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModulePlugin.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) diff --git a/XEngine_Source/XEngine_ModuleProtocol/Makefile b/XEngine_Source/XEngine_ModuleProtocol/Makefile index 38bae13..8fc6ffa 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/Makefile +++ b/XEngine_Source/XEngine_ModuleProtocol/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -lNetHelp_XSocket -lXEngine_SystemApi -lNetHelp_APIAddr -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = ModuleProtocol_Packet.o ModuleProtocol_Parse.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_ModuleSystem/Makefile b/XEngine_Source/XEngine_ModuleSystem/Makefile index 16002b3..f2b808a 100644 --- a/XEngine_Source/XEngine_ModuleSystem/Makefile +++ b/XEngine_Source/XEngine_ModuleSystem/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LOADSO = LIB = -lXEngine_BaseLib -lXEngine_SystemApi @@ -13,31 +9,29 @@ LIBEX = OBJECTS = ModuleSystem_API.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Makefile index 567c61c..756b856 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Makefile +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -ljsoncpp @@ -13,31 +9,30 @@ LIBEX = OBJECTS = Plugin_BMIndex.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif + ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +41,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Makefile index 663ba4e..08c6270 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Makefile +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -ljsoncpp @@ -13,31 +9,30 @@ LIBEX = OBJECTS = Plugin_Meter.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif + ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +41,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile index c2924ba..0901e4b 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Plugin_Password.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Makefile index 24bec00..d962111 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Makefile +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Plugin_Timezone.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile index 886a283..f0c8479 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ -I ../../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp LIB = -lXEngine_BaseLib -lXEngine_Algorithm -ljsoncpp @@ -13,31 +9,29 @@ LIBEX = OBJECTS = Plugin_Zodiac.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c - DEBUG = -g + DEBUG = -g -D _DEBUG else FLAGS = -c -lc_p - DEBUG = -g -pg + DEBUG = -g -pg -D _DEBUG endif endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif FILEEXT = so LIBFLAG = -shared @@ -46,7 +40,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile index 14239b3..30a2565 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile @@ -1,11 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 -UNICODE = 0 LOADHDR = -I ./ LOADSO = -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleSystem -L ../../XEngine_ModuleHelp -L ../../XEngine_ModulePlugin \ -L ../../XEngine_Depend/XEngine_Module/jsoncpp -L ../../XEngine_Depend/XEngine_Module/XEngine_InfoReport \ @@ -21,8 +17,8 @@ OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_HTTPTask.o XEngine_Plugi TaskPost_DTest.o TaskPost_Log.o TaskPost_P2PClient.o TaskPost_PostCode.o TaskPost_QRCode.o TaskPost_ShortLink.o TaskPost_SocketTest.o TaskPost_WordFilter.o TaskPost_Image.o TaskPost_BackService.o TaskPost_Deamon.o TaskPost_Machine.o ifeq ($(RELEASE),1) -FLAGS = -c -DEBUG = +FLAGS = -c -D _RELEASE +DEBUG = -O2 else ifeq ($(PLATFORM),mac) FLAGS = -c @@ -34,18 +30,16 @@ else endif ifeq ($(UNICODE),1) -UNICODE = -D _UNICODE +override UNICODE := -D __UNICODE__ else -UNICODE = +override UNICODE := -D __ANSI__ endif ifeq ($(PLATFORM),linux) ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) PLATVER = -D __CENTOS__ - PLATDIR = XEngine_Linux/Centos else PLATVER = -D __UBUNTU__ - PLATDIR = XEngine_Linux/Ubuntu endif CC += -Wformat-overflow=0 FILEEXT = so @@ -55,7 +49,6 @@ ifeq ($(PLATFORM),linux) else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac FILEEXT = dylib LIBFLAG = -dynamiclib LIBEX = -lpthread -ldl -- Gitee From d7855388c1dd1a63684105d24b9ad5d2d5ca3dae Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 24 May 2025 14:41:40 +0800 Subject: [PATCH 06/22] update:depend library --- XEngine_Source/XEngine_DBDepend/XEngine_IPMacData | 2 +- XEngine_Source/XEngine_DBDepend/XEngine_PhoneData | 2 +- XEngine_Source/XEngine_Depend | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData b/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData index 61db4fb..f01572c 160000 --- a/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData +++ b/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData @@ -1 +1 @@ -Subproject commit 61db4fbc0846a63bda426bcdebea5c9a76350fbe +Subproject commit f01572c5fa1eceb94c008e1cd723c7773904d7cc diff --git a/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData b/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData index 56dd796..f7eebe0 160000 --- a/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData +++ b/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData @@ -1 +1 @@ -Subproject commit 56dd7962c9e7198f3e7ad9b29b32e23e6c62ced8 +Subproject commit f7eebe0a4e9553c71da8a3d7583a9d162ba2f8a0 diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 5bc8164..b9427ac 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 5bc816462c2c1f04e282ecce6c4c12db0ec11029 +Subproject commit b9427ac1eb1183eb76ae73c61b2cf0fb27448aa4 -- Gitee From b15347edda22b625603749281bd3da52979454c0 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 24 May 2025 15:03:46 +0800 Subject: [PATCH 07/22] fixed:build failure --- XEngine_Source/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 302d85a..07a6398 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -25,6 +25,12 @@ APIMODULE_IPMAC_PATH = ./XEngine_DBDepend/XEngine_IPMacData/XEngine_Source/XEngi APP_HTTP_PATH = ./XEngine_ServiceApp/XEngine_HttpApp +ifeq ($(PLATFORM),linux) + FILEEXT = so +else ifeq ($(PLATFORM),mac) + FILEEXT = dylib +endif + XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleSystem.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \ libModulePlugin_Zodiac.so libModulePlugin_Password.so libModulePlugin_Timezone.so libModulePlugin_BMIndex.so libModulePlugin_Meter.so \ @@ -34,12 +40,6 @@ XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ .PHONY:MakeAll MakeAll:$(XENGINE_MODULES) -ifeq ($(PLATFORM),linux) - FILEEXT = so -else ifeq ($(PLATFORM),mac) - FILEEXT = dylib -endif - libjsoncpp.so: ifeq ($(FLAGS), InstallAll) cp $(THIRDPART_MODULE_JSONCPP)/libjsoncpp.$(FILEEXT) ../XEngine_Release/ -- Gitee From b2d7a7e78fdf2b54dd47d10c23f8ec1e14b6819f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Sat, 24 May 2025 17:00:09 +0800 Subject: [PATCH 08/22] fixed:memory leak for configure parse --- .github/workflows/msbuild.yml | 1 - .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 15 +++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml index 2d715da..b9663c5 100644 --- a/.github/workflows/msbuild.yml +++ b/.github/workflows/msbuild.yml @@ -151,7 +151,6 @@ jobs: cd XEngine_Release ./copydb.bat ./VSCopy_Arm64.bat - ./XEngine_HttpApp.exe -t shell: pwsh - name: Upload folder as artifact with x86 diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index a07bacf..e68aabc 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -61,21 +61,12 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; return false; } - size_t nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - size_t nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + XCHAR tszMsgBuffer[8192] = {}; + size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); fclose(pSt_File); //开始解析配置文件 std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; -- Gitee From cd6b3aed27fc64dc01943e5851d0c89fc8243f6c Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 26 May 2025 11:18:50 +0800 Subject: [PATCH 09/22] ci:build test --- XEngine_Source/XEngine_ModuleHelp/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ModuleHelp/Makefile b/XEngine_Source/XEngine_ModuleHelp/Makefile index ea007a6..25f94c8 100644 --- a/XEngine_Source/XEngine_ModuleHelp/Makefile +++ b/XEngine_Source/XEngine_ModuleHelp/Makefile @@ -15,7 +15,7 @@ ifeq ($(MACRO_QR_SUPPORT),1) LIB += -lqrencode endif ifeq ($(MACRO_OPENCV_SUPPORT),1) - LIB += -llzma -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_wechat_qrcode -ltesseract -lleptonica + LIB += -lopencv_core -lopencv_imgcodecs -lopencv_imgproc -lopencv_wechat_qrcode -ltesseract -lleptonica endif ifeq ($(RELEASE),1) -- Gitee From 2e82850aaf9cb25365b7dca09bd80c1e51bc189b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 27 May 2025 10:07:50 +0800 Subject: [PATCH 10/22] improved:read buffer configure --- .../ModuleConfigure_Json.cpp | 45 ++++--------------- 1 file changed, 9 insertions(+), 36 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index e68aabc..19d6ff8 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -273,21 +273,12 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigF Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; return false; } - size_t nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - size_t nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + XCHAR tszMsgBuffer[8192] = {}; + size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); fclose(pSt_File); //开始解析配置文件 std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; @@ -353,21 +344,12 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_PluginFile(LPCXSTR lpszConfigFi Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; return false; } - size_t nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - size_t nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + XCHAR tszMsgBuffer[8192] = {}; + size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); fclose(pSt_File); //开始解析配置文件 std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; @@ -456,21 +438,12 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFi Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; return false; } - int nCount = 0; - XCHAR tszMsgBuffer[4096]; - while (1) - { - int nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); - if (nRet <= 0) - { - break; - } - nCount += nRet; - } + XCHAR tszMsgBuffer[8192] = {}; + size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); fclose(pSt_File); std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) + if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; -- Gitee From 0f6dcdf8ba8d07b5f1c0ba036b142187ed83af7b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 May 2025 11:25:40 +0800 Subject: [PATCH 11/22] update:depend library update:match xengine v9.20 --- .../XEngine_DBDepend/XEngine_IPMacData | 2 +- .../XEngine_DBDepend/XEngine_PhoneData | 2 +- XEngine_Source/XEngine_Depend | 2 +- .../ModuleConfig_Define.h | 66 +++++++++---------- .../ModuleDatabase_XLog.cpp | 2 +- .../XEngine_ModuleHelp/ModuleHelp_Define.h | 4 +- .../ModuleHelp_Image/ModuleHelp_ImageGet.cpp | 2 +- .../ModuleHelp_P2PClient.cpp | 2 +- .../ModuleHelp_P2PClient.h | 2 +- .../ModulePlugin_LibCore.h | 2 +- .../ModulePlugin_Loader/ModulePlugin_Loader.h | 4 +- .../ModulePlugin_LuaCore.cpp | 4 +- .../ModulePlugin_LuaCore.h | 2 +- .../ModuleProtocol_Packet.cpp | 38 +++++------ .../ModuleProtocol_Packet.h | 2 +- .../ModuleSystem_API/ModuleSystem_API.cpp | 28 ++++---- .../Plugin_Password/Plugin_Password.cpp | 2 +- .../Plugin_Timezone/Plugin_Timezone.h | 2 +- .../XEngine_APIServiceApp.cpp | 12 ++-- .../XEngine_HttpApp/XEngine_HTTPTask.cpp | 14 ++-- .../XEngine_HttpApp/XEngine_HTTPTask.h | 2 +- .../XEngine_HttpApp/XEngine_HttpApp.cpp | 2 +- .../XEngine_HttpApp/XEngine_Network.cpp | 10 +-- .../XEngine_HttpApp/XEngine_Network.h | 10 +-- .../XEngine_TaskGet/TaskGet_Bank.cpp | 4 +- .../XEngine_TaskGet/TaskGet_Oil.cpp | 6 +- .../XEngine_TaskGet/TaskGet_Translation.cpp | 6 +- .../XEngine_TaskGet/TaskGet_Weather.cpp | 4 +- .../XEngine_TaskPost/TaskPost_BackService.cpp | 12 ++-- .../XEngine_TaskPost/TaskPost_BackService.h | 4 +- .../XEngine_TaskPost/TaskPost_Deamon.cpp | 6 +- .../XEngine_TaskPost/TaskPost_Deamon.h | 2 +- .../XEngine_TaskPost/TaskPost_Image.cpp | 6 +- .../XEngine_TaskPost/TaskPost_P2PClient.cpp | 4 +- .../XEngine_TaskPost/TaskPost_P2PClient.h | 2 +- .../XEngine_TaskPost/TaskPost_QRCode.cpp | 2 +- .../XEngine_TaskPost/TaskPost_ShortLink.cpp | 4 +- .../XEngine_TaskPost/TaskPost_SocketTest.cpp | 2 +- .../XEngine_TaskPost/TaskPost_SocketTest.h | 2 +- XEngine_Source/XEngine_UserProtocol.h | 36 +++++----- 40 files changed, 160 insertions(+), 160 deletions(-) diff --git a/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData b/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData index f01572c..a6449e7 160000 --- a/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData +++ b/XEngine_Source/XEngine_DBDepend/XEngine_IPMacData @@ -1 +1 @@ -Subproject commit f01572c5fa1eceb94c008e1cd723c7773904d7cc +Subproject commit a6449e797a2ec10e9e4a3d40c1f9f27487f7dd02 diff --git a/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData b/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData index f7eebe0..2ffa9e3 160000 --- a/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData +++ b/XEngine_Source/XEngine_DBDepend/XEngine_PhoneData @@ -1 +1 @@ -Subproject commit f7eebe0a4e9553c71da8a3d7583a9d162ba2f8a0 +Subproject commit 2ffa9e3416784d44e07ef77304f4d8cda1570748 diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index b9427ac..78d2ea2 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit b9427ac1eb1183eb76ae73c61b2cf0fb27448aa4 +Subproject commit 78d2ea2cfcfa4701e122ee3e4ac536f712831f86 diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index a08ace6..76d7b61 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -35,8 +35,8 @@ typedef struct }st_XTime; //次数*时间=超时 struct { - XCHAR tszAPIFile[MAX_PATH]; //日志文件地址 - XCHAR tszServiceFile[MAX_PATH]; + XCHAR tszAPIFile[XPATH_MAX]; //日志文件地址 + XCHAR tszServiceFile[XPATH_MAX]; int nMaxSize; //最大日志大小 int nMaxCount; //最大日志个数 int nLogLeave; //日志等级 @@ -53,46 +53,46 @@ typedef struct }st_XSql; struct { - XCHAR tszWeatherUrl[MAX_PATH]; //天气接口 - XCHAR tszBankUrl[MAX_PATH]; //银行卡验证地址 - XCHAR tszOilUrl[MAX_PATH]; //油价接口 + XCHAR tszWeatherUrl[XPATH_MAX]; //天气接口 + XCHAR tszBankUrl[XPATH_MAX]; //银行卡验证地址 + XCHAR tszOilUrl[XPATH_MAX]; //油价接口 //翻译接口 struct { - XCHAR tszAPPUrl[MAX_PATH]; - XCHAR tszAPPID[MAX_PATH]; - XCHAR tszAPPKey[MAX_PATH]; + XCHAR tszAPPUrl[XPATH_MAX]; + XCHAR tszAPPID[XPATH_MAX]; + XCHAR tszAPPKey[XPATH_MAX]; }st_TranslationInfo; }st_XApi; struct { bool bEnable; //是否启用 - XCHAR tszPlugin[MAX_PATH]; //配置文件地址 + XCHAR tszPlugin[XPATH_MAX]; //配置文件地址 }st_XPlugin; struct { //二维码模型库 struct { - XCHAR tszModelDetect[MAX_PATH]; - XCHAR tszModelSr[MAX_PATH]; - XCHAR tszProtoDetect[MAX_PATH]; - XCHAR tszProtoSr[MAX_PATH]; + XCHAR tszModelDetect[XPATH_MAX]; + XCHAR tszModelSr[XPATH_MAX]; + XCHAR tszProtoDetect[XPATH_MAX]; + XCHAR tszProtoSr[XPATH_MAX]; }st_ConfigQRCodec; - XCHAR tszConfigDeamon[MAX_PATH]; //守护进程配置文件 - XCHAR tszConfigHTTPMime[MAX_PATH]; //HTTPMINE配置文件 - XCHAR tszConfigHTTPCode[MAX_PATH]; //HTTP状态配置文件 + XCHAR tszConfigDeamon[XPATH_MAX]; //守护进程配置文件 + XCHAR tszConfigHTTPMime[XPATH_MAX]; //HTTPMINE配置文件 + XCHAR tszConfigHTTPCode[XPATH_MAX]; //HTTP状态配置文件 }st_XConfig; struct { - XCHAR tszHostUrl[MAX_PATH]; //主机地址 + XCHAR tszHostUrl[XPATH_MAX]; //主机地址 int nHTTPCode; //转发模式,301 永久,302 临时 }st_XShortLink; struct { bool bEnable; //是否启用 - XCHAR tszImagePath[MAX_PATH]; //图片文字识别配置 - XCHAR tszImageLanguage[MAX_PATH]; //语言支持 + XCHAR tszImagePath[XPATH_MAX]; //图片文字识别配置 + XCHAR tszImageLanguage[XPATH_MAX]; //语言支持 }st_XImageText; struct { @@ -101,8 +101,8 @@ typedef struct }st_XReload; struct { - XCHAR tszUserName[MAX_PATH]; - XCHAR tszUserPass[MAX_PATH]; + XCHAR tszUserName[XPATH_MAX]; + XCHAR tszUserPass[XPATH_MAX]; struct { bool bBackService; @@ -112,15 +112,15 @@ typedef struct struct { bool bEnable; - XCHAR tszDBPhone[MAX_PATH]; - XCHAR tszDBMac[MAX_PATH]; - XCHAR tszDBIPAddr[MAX_PATH]; - XCHAR tszDBISPAddr[MAX_PATH]; + XCHAR tszDBPhone[XPATH_MAX]; + XCHAR tszDBMac[XPATH_MAX]; + XCHAR tszDBIPAddr[XPATH_MAX]; + XCHAR tszDBISPAddr[XPATH_MAX]; }st_XAPIModule; struct { bool bEnable; - XCHAR tszAPIUrl[MAX_PATH]; + XCHAR tszAPIUrl[XPATH_MAX]; XCHAR tszServiceName[128]; }st_XReport; struct @@ -132,8 +132,8 @@ typedef struct typedef struct { bool bEnable; - XCHAR tszPluginMethod[MAX_PATH]; - XCHAR tszPluginFile[MAX_PATH]; + XCHAR tszPluginMethod[XPATH_MAX]; + XCHAR tszPluginFile[XPATH_MAX]; }XENGINE_PLUGININFO; typedef struct { @@ -144,9 +144,9 @@ typedef struct typedef struct { bool bEnable; - XCHAR tszOPMethod[MAX_PATH]; - XCHAR tszOPNote[MAX_PATH]; - XCHAR tszOPExample[MAX_PATH]; + XCHAR tszOPMethod[XPATH_MAX]; + XCHAR tszOPNote[XPATH_MAX]; + XCHAR tszOPExample[XPATH_MAX]; }XENGINE_OPTIONINFO; typedef struct { @@ -157,8 +157,8 @@ typedef struct typedef struct { bool bEnable; //是否启用 - XCHAR tszAPPName[MAX_PATH]; //应用程序名称 - XCHAR tszAPPPath[MAX_PATH]; //应用程序路径 + XCHAR tszAPPName[XPATH_MAX]; //应用程序名称 + XCHAR tszAPPPath[XPATH_MAX]; //应用程序路径 int nReTime; //是否自动重启 int nReNumber; //自定义 diff --git a/XEngine_Source/XEngine_ModuleDatabase/ModuleDatabase_XLog/ModuleDatabase_XLog.cpp b/XEngine_Source/XEngine_ModuleDatabase/ModuleDatabase_XLog/ModuleDatabase_XLog.cpp index 39fd247..44e1740 100644 --- a/XEngine_Source/XEngine_ModuleDatabase/ModuleDatabase_XLog/ModuleDatabase_XLog.cpp +++ b/XEngine_Source/XEngine_ModuleDatabase/ModuleDatabase_XLog/ModuleDatabase_XLog.cpp @@ -350,7 +350,7 @@ bool CModuleDatabase_XLog::ModuleDatabase_XLog_Show(XCHAR*** ppptszList, int* pI return false; } *pInt_ListCount = (int)nllLine; - BaseLib_Memory_Malloc((XPPPMEM)ppptszList, (int)nllLine, MAX_PATH); + BaseLib_Memory_Malloc((XPPPMEM)ppptszList, (int)nllLine, XPATH_MAX); for (__int64u i = 0; i < nllLine; i++) { XCHAR** pptszResult = DataBase_MySQL_GetResult(xhDBSQL, xhTable); diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h index 730994e..1d8f7ce 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h @@ -328,9 +328,9 @@ typedef enum ////////////////////////////////////////////////////////////////////////// // 导出回调函数 ////////////////////////////////////////////////////////////////////////// -typedef void(CALLBACK* CALLBACK_APISERVICE_MODULE_HELP_P2PCLIENT)(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam); +typedef void(XCALLBACK* CALLBACK_APISERVICE_MODULE_HELP_P2PCLIENT)(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam); //套接字测试回调:测试句柄,测试的服务器地址,测试的端口,当前测试次数,失败次数,成功次数,状态:0成功报告,1失败报告,2结束报告,自定义参数 -typedef void(CALLBACK* CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST)(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam); +typedef void(XCALLBACK* CALLBACK_APISERVICE_MODULE_HELP_SOCKETTEST)(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam); ////////////////////////////////////////////////////////////////////////// // 导出数据结构 ////////////////////////////////////////////////////////////////////////// diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Image/ModuleHelp_ImageGet.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Image/ModuleHelp_ImageGet.cpp index 535f97e..6865d6b 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Image/ModuleHelp_ImageGet.cpp +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Image/ModuleHelp_ImageGet.cpp @@ -213,7 +213,7 @@ bool CModuleHelp_ImageGet::ModuleHelp_ImageGet_TextGet(LPCXSTR lpszMsgBuffer, in } *pInt_ListCount = stl_ListStr.size(); - BaseLib_Memory_Malloc((XPPPMEM)ppptszListStr, *pInt_ListCount, MAX_PATH); + BaseLib_Memory_Malloc((XPPPMEM)ppptszListStr, *pInt_ListCount, XPATH_MAX); auto stl_ListIterator = stl_ListStr.begin(); for (int i = 0; stl_ListIterator != stl_ListStr.end(); i++, stl_ListIterator++) diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp index 4aadafb..418ad7e 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.cpp @@ -506,7 +506,7 @@ bool CModuleHelp_P2PClient::ModuleHelp_P2PClient_Heart(XENGINE_P2XPPEER_PROTOCOL ////////////////////////////////////////////////////////////////////////// // 保护函数 ////////////////////////////////////////////////////////////////////////// -XHTHREAD CALLBACK CModuleHelp_P2PClient::ModuleHelp_P2PClient_Thread(XPVOID lParam) +XHTHREAD XCALLBACK CModuleHelp_P2PClient::ModuleHelp_P2PClient_Thread(XPVOID lParam) { CModuleHelp_P2PClient* pClass_This = (CModuleHelp_P2PClient*)lParam; list stl_ListRemove; diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.h b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.h index 6f14a8f..4837475 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.h +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_P2PClient/ModuleHelp_P2PClient.h @@ -26,7 +26,7 @@ public: bool ModuleHelp_P2PClient_DelAll(); bool ModuleHelp_P2PClient_Heart(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol); protected: - static XHTHREAD CALLBACK ModuleHelp_P2PClient_Thread(XPVOID lParam); + static XHTHREAD XCALLBACK ModuleHelp_P2PClient_Thread(XPVOID lParam); private: bool m_bIsRun; int m_nTimeout; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h index 24eba96..5fba9cc 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h @@ -22,7 +22,7 @@ typedef struct #else void* mhFile; #endif - XCHAR tszModuleFile[MAX_PATH]; + XCHAR tszModuleFile[XPATH_MAX]; bool(*fpCall_PluginCore_Init)(XPVOID lParam); void(*fpCall_PluginCore_UnInit)(); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h index 5a63a5a..292d71e 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -12,8 +12,8 @@ *********************************************************************/ typedef struct { - XCHAR tszModuleFile[MAX_PATH]; - XCHAR tszModuleMethod[MAX_PATH]; + XCHAR tszModuleFile[XPATH_MAX]; + XCHAR tszModuleMethod[XPATH_MAX]; XNETHANDLE xhToken; int nType; }PLUGINCORE_LOADER, * LPPLUGINCORE_LOADER; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp index c2b5599..9b194a7 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp @@ -142,8 +142,8 @@ bool CModulePlugin_LuaCore::ModulePlugin_LuaCore_Exec(XNETHANDLE xhModule, XCHAR st_csStl.unlock_shared(); return false; } - XCHAR tszURLParam[MAX_PATH]; - memset(tszURLParam, '\0', MAX_PATH); + XCHAR tszURLParam[XPATH_MAX]; + memset(tszURLParam, '\0', XPATH_MAX); for (int i = 1; i < nListCount; i++) { diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h index ac56aef..184c3f4 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h @@ -12,7 +12,7 @@ *********************************************************************/ typedef struct { - XCHAR tszModuleFile[MAX_PATH]; + XCHAR tszModuleFile[XPATH_MAX]; #if (1 == _XENGINE_BUILD_SWITCH_LUA) lua_State* pSt_LuaState; #endif diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp index 5a5e74f..3f0cc36 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -1321,9 +1321,9 @@ bool CModuleProtocol_Packet::ModuleProtocol_Packet_HardWare(XCHAR* ptszHWInfo, i } int nDiskNumber = 0; XCHAR** pptszRootName; - XCHAR tszOSName[MAX_PATH]; - XCHAR tszOSVersion[MAX_PATH]; - XCHAR tszOSBuild[MAX_PATH]; + XCHAR tszOSName[XPATH_MAX]; + XCHAR tszOSVersion[XPATH_MAX]; + XCHAR tszOSBuild[XPATH_MAX]; XLONG nOSPro = 0; XCHAR tszOSInfo[2048]; SYSTEMAPI_DISK_INFOMATION st_DiskInfo; @@ -1348,11 +1348,11 @@ bool CModuleProtocol_Packet::ModuleProtocol_Packet_HardWare(XCHAR* ptszHWInfo, i } BaseLib_Memory_Free((XPPPMEM)&pptszRootName, nDiskNumber); - XCHAR tszDriveStr[MAX_PATH]; - memset(tszDriveStr, '\0', MAX_PATH); + XCHAR tszDriveStr[XPATH_MAX]; + memset(tszDriveStr, '\0', XPATH_MAX); #ifdef _MSC_BUILD - GetLogicalDriveStringsA(MAX_PATH, tszDriveStr); + GetLogicalDriveStringsA(XPATH_MAX, tszDriveStr); #else LPCXSTR lpszDir = _X("/"); strcpy(tszDriveStr, lpszDir); @@ -1472,24 +1472,24 @@ bool CModuleProtocol_Packet::ModuleProtocol_Packet_SoftWare(XCHAR* ptszSWInfo, i } int nProcessCount; XLONG nOSProcessor; - XCHAR tszOSBuild[MAX_PATH]; - XCHAR tszOSVersion[MAX_PATH]; - XCHAR tszOSInfo[MAX_PATH]; - XCHAR tszUPTime[MAX_PATH]; - XCHAR tszOSUser[MAX_PATH]; - XCHAR tszServicePacket[MAX_PATH]; + XCHAR tszOSBuild[XPATH_MAX]; + XCHAR tszOSVersion[XPATH_MAX]; + XCHAR tszOSInfo[XPATH_MAX]; + XCHAR tszUPTime[XPATH_MAX]; + XCHAR tszOSUser[XPATH_MAX]; + XCHAR tszServicePacket[XPATH_MAX]; XENGINE_LIBTIME st_LibTimer; - memset(tszOSBuild, '\0', MAX_PATH); - memset(tszOSVersion, '\0', MAX_PATH); - memset(tszOSInfo, '\0', MAX_PATH); - memset(tszUPTime, '\0', MAX_PATH); - memset(tszOSUser, '\0', MAX_PATH); - memset(tszServicePacket, '\0', MAX_PATH); + memset(tszOSBuild, '\0', XPATH_MAX); + memset(tszOSVersion, '\0', XPATH_MAX); + memset(tszOSInfo, '\0', XPATH_MAX); + memset(tszUPTime, '\0', XPATH_MAX); + memset(tszOSUser, '\0', XPATH_MAX); + memset(tszServicePacket, '\0', XPATH_MAX); memset(&st_LibTimer, '\0', sizeof(XENGINE_LIBTIME)); #ifdef _MSC_BUILD - XLONG dwMaxSize = MAX_PATH; + XLONG dwMaxSize = XPATH_MAX; if (!GetComputerNameA(tszOSUser, &dwMaxSize)) { ModuleProtocol_IsErrorOccur = true; diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h index fbbd1b8..9e78d49 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h @@ -12,7 +12,7 @@ *********************************************************************/ typedef struct { - XCHAR tszUsername[MAX_PATH]; + XCHAR tszUsername[XPATH_MAX]; XCHAR tszClientAddr[128]; }P2XPPROTOCOL_LANPACKET; diff --git a/XEngine_Source/XEngine_ModuleSystem/ModuleSystem_API/ModuleSystem_API.cpp b/XEngine_Source/XEngine_ModuleSystem/ModuleSystem_API/ModuleSystem_API.cpp index b19e91a..1377999 100644 --- a/XEngine_Source/XEngine_ModuleSystem/ModuleSystem_API/ModuleSystem_API.cpp +++ b/XEngine_Source/XEngine_ModuleSystem/ModuleSystem_API/ModuleSystem_API.cpp @@ -62,14 +62,14 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) return false; } - XCHAR tszFilePath[MAX_PATH]; - XCHAR tszFileName[MAX_PATH]; + XCHAR tszFilePath[XPATH_MAX]; + XCHAR tszFileName[XPATH_MAX]; - memset(tszFilePath, '\0', MAX_PATH); - memset(tszFileName, '\0', MAX_PATH); + memset(tszFilePath, '\0', XPATH_MAX); + memset(tszFileName, '\0', XPATH_MAX); - GetCurrentDirectoryA(MAX_PATH, tszFilePath); - GetModuleFileNameA(NULL, tszFileName, MAX_PATH); + GetCurrentDirectoryA(XPATH_MAX, tszFilePath); + GetModuleFileNameA(NULL, tszFileName, XPATH_MAX); //目标 pSt_ILink->SetPath(tszFileName); //工作目录 @@ -80,8 +80,8 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) pSt_ILink->SetShowCmd(SW_SHOW); //保存快捷方式到指定目录下 - XCHAR tszAFile[MAX_PATH]; - WCHAR tszUFile[MAX_PATH]; + XCHAR tszAFile[XPATH_MAX]; + WCHAR tszUFile[XPATH_MAX]; memset(tszAFile, '\0', sizeof(tszAFile)); memset(tszUFile, '\0', sizeof(tszUFile)); @@ -108,7 +108,7 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) } else { - XCHAR tszAFile[MAX_PATH]; + XCHAR tszAFile[XPATH_MAX]; memset(tszAFile, '\0', sizeof(tszAFile)); if (S_OK != SHGetFolderPathA(NULL, CSIDL_STARTUP, NULL, 0, tszAFile)) @@ -127,7 +127,7 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) if (0 != _xtaccess(lpszStartStr, F_OK)) { XCHAR tszMsgBuffer[2048]; - XCHAR tszFileDir[MAX_PATH]; + XCHAR tszFileDir[XPATH_MAX]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); memset(tszFileDir, '\0', sizeof(tszFileDir)); @@ -155,8 +155,8 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) return false; } } - XCHAR tszServiceStr[MAX_PATH]; - memset(tszServiceStr, '\0', MAX_PATH); + XCHAR tszServiceStr[XPATH_MAX]; + memset(tszServiceStr, '\0', XPATH_MAX); _xstprintf(tszServiceStr, _X("sudo systemctl enable xdeamon")); if (-1 == system(tszServiceStr)) @@ -168,8 +168,8 @@ bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */) } else { - XCHAR tszServiceStr[MAX_PATH]; - memset(tszServiceStr, '\0', MAX_PATH); + XCHAR tszServiceStr[XPATH_MAX]; + memset(tszServiceStr, '\0', XPATH_MAX); _xstprintf(tszServiceStr, _X("systemctl disable xdeamon")); if (-1 == system(tszServiceStr)) diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp index 8d728dc..cd8f6ca 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp @@ -72,7 +72,7 @@ bool CPlugin_Password::PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* XCHAR tszKeyName[128]; XCHAR tszParamType[128]; XCHAR tszParamLength[128]; - XCHAR tszPassword[MAX_PATH]; + XCHAR tszPassword[XPATH_MAX]; Json::Value st_JsonRoot; Json::Value st_JsonObject; Json::StreamWriterBuilder st_JsonBuilder; diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h index 98c975e..d0dd3e9 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h @@ -13,7 +13,7 @@ typedef struct { XENGINE_LIBTIME st_TimeZone; - XCHAR tszTimeCountry[MAX_PATH]; + XCHAR tszTimeCountry[XPATH_MAX]; }MODULEPLUGIN_TIMEZONE; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_APIServiceApp/XEngine_APIServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_APIServiceApp/XEngine_APIServiceApp.cpp index 8db5645..ed69e9b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_APIServiceApp/XEngine_APIServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_APIServiceApp/XEngine_APIServiceApp.cpp @@ -147,11 +147,11 @@ void WINAPI XEngine_ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,设置服务启动状态成功,服务运行中")); bIsRun = true; - XCHAR tszCurrectDir[MAX_PATH] = {}; - XCHAR tszPathBuffer[MAX_PATH] = {}; - GetModuleFileNameA(NULL, tszCurrectDir, MAX_PATH); + XCHAR tszCurrectDir[XPATH_MAX] = {}; + XCHAR tszPathBuffer[XPATH_MAX] = {}; + GetModuleFileNameA(NULL, tszCurrectDir, XPATH_MAX); BaseLib_String_GetFileAndPathA(tszCurrectDir, tszPathBuffer); - _xstrcat(tszPathBuffer, MAX_PATH, _X("XEngine_HttpApp.exe")); + _xstrcat(tszPathBuffer, XPATH_MAX, _X("XEngine_HttpApp.exe")); if (!SystemApi_Process_CreateProcess(&dwProcessID, tszPathBuffer, "-db 0", false)) { @@ -206,8 +206,8 @@ void WINAPI XEngine_ServiceCtrlHandler(DWORD dwControl) // 安装服务 void XEngine_InstallService() { - TCHAR tszFilePath[MAX_PATH] = {}; - if (!GetModuleFileName(NULL, tszFilePath, MAX_PATH)) + TCHAR tszFilePath[XPATH_MAX] = {}; + if (!GetModuleFileName(NULL, tszFilePath, XPATH_MAX)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,安装服务失败,获取文件路径失败,错误码:%d"), GetLastError()); return; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp index 11e540d..a986127 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.cpp @@ -10,7 +10,7 @@ // Purpose: HTTP任务处理代码 // History: *********************************************************************/ -XHTHREAD CALLBACK HTTPTask_TastPost_Thread(XPVOID lParam) +XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam) { //任务池是编号1开始的. int nThreadPos = *(int*)lParam; @@ -75,8 +75,8 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST memset(tszUrlName, '\0', sizeof(tszUrlName)); - XCHAR tszUrlBuffer[MAX_PATH] = {}; - XCHAR tszGBKBuffer[MAX_PATH] = {}; + XCHAR tszUrlBuffer[XPATH_MAX] = {}; + XCHAR tszGBKBuffer[XPATH_MAX] = {}; Cryption_Codec_UrlDeCodec(pSt_HTTPParam->tszHttpUri, _tcsxlen(pSt_HTTPParam->tszHttpUri), tszUrlBuffer); #ifdef _MSC_BUILD int nCLen = _tcsxlen(tszUrlBuffer); @@ -100,8 +100,8 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,发送的URL请求参数不正确:%s"), lpszClientAddr, tszGBKBuffer); return false; } - XCHAR tszKey[MAX_PATH]; - XCHAR tszValue[MAX_PATH]; + XCHAR tszKey[XPATH_MAX]; + XCHAR tszValue[XPATH_MAX]; LPCXSTR lpszFuncName = _X("api"); LPCXSTR lpszParamFuncKey = _X("function"); LPCXSTR lpszParamName = _X("params1"); @@ -131,8 +131,8 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST LPCXSTR lpszParamDeamon = _X("deamon"); LPCXSTR lpszParamMachine = _X("machine"); - memset(tszKey, '\0', MAX_PATH); - memset(tszValue, '\0', MAX_PATH); + memset(tszKey, '\0', XPATH_MAX); + memset(tszValue, '\0', XPATH_MAX); if (0 != _tcsxnicmp(lpszFuncName, tszUrlName, _tcsxlen(lpszFuncName))) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h index 56a3f0d..b03864e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HTTPTask.h @@ -11,6 +11,6 @@ // History: *********************************************************************/ //任务处理池,用来获取一个完整包 -XHTHREAD CALLBACK HTTPTask_TastPost_Thread(XPVOID lParam); +XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam); //任务处理相关函数,处理包的内容 bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszRVBuffer, int nRVLen, XCHAR*** ppptszHDRList, int nHDRCount); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index bbc708b..6082d32 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -71,7 +71,7 @@ void ServiceApp_Stop(int signo) LONG WINAPI Coredump_ExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) { static int i = 0; - XCHAR tszFileStr[MAX_PATH] = {}; + XCHAR tszFileStr[XPATH_MAX] = {}; XCHAR tszTimeStr[128] = {}; BaseLib_Time_TimeToStr(tszTimeStr); _xstprintf(tszFileStr, _X("./XEngine_Coredump/dumpfile_%s_%d.dmp"), tszTimeStr, i++); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp index 62c20db..129d171 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.cpp @@ -11,14 +11,14 @@ // History: *********************************************************************/ //////////////////////////////////////////////////////////////////////////下面是HTTP网络IO相关代码处理函数 -bool CALLBACK Network_Callback_HTTPLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +bool XCALLBACK Network_Callback_HTTPLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { SocketOpt_HeartBeat_InsertAddrEx(xhHTTPHeart, lpszClientAddr); HttpProtocol_Server_CreateClientEx(xhHTTPPacket, lpszClientAddr, 0); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,连接到服务器"), lpszClientAddr); return true; } -void CALLBACK Network_Callback_HTTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) +void XCALLBACK Network_Callback_HTTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { if (!HttpProtocol_Server_InserQueueEx(xhHTTPPacket, lpszClientAddr, lpszRecvMsg, nMsgLen)) { @@ -28,16 +28,16 @@ void CALLBACK Network_Callback_HTTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, SocketOpt_HeartBeat_ActiveAddrEx(xhHTTPHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("HTTP客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK Network_Callback_HTTPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) +void XCALLBACK Network_Callback_HTTPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, false); } -void CALLBACK Network_Callback_HTTPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) +void XCALLBACK Network_Callback_HTTPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, true); } //////////////////////////////////////////////////////////////////////////RFC相关 -void CALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam) +void XCALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam) { if ((nMSGLen >= 20) && ((lpszMSGBuffer[0] & 0xC0) == 0x00) && (lpszMSGBuffer[4] == 0x21) && (lpszMSGBuffer[5] == 0x12) && ((XBYTE)lpszMSGBuffer[6] == 0xA4) && (lpszMSGBuffer[7] == 0x42)) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h index 0984b08..4833db6 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Network.h @@ -11,12 +11,12 @@ // History: *********************************************************************/ //HTTP相关 -bool CALLBACK Network_Callback_HTTPLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK Network_Callback_HTTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); -void CALLBACK Network_Callback_HTTPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); -void CALLBACK Network_Callback_HTTPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); +bool XCALLBACK Network_Callback_HTTPLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK Network_Callback_HTTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void XCALLBACK Network_Callback_HTTPLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void XCALLBACK Network_Callback_HTTPHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //RFC相关 -void CALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam); +void XCALLBACK Network_Callback_RFCRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMSGBuffer, int nMSGLen, XPVOID lParam); //关闭与发送 void XEngine_Network_Close(LPCXSTR lpszClientAddr, bool bHeart); bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Bank.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Bank.cpp index 4058541..f796776 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Bank.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Bank.cpp @@ -9,13 +9,13 @@ bool HTTPTask_TaskGet_BankInfo(LPCXSTR lpszClientAddr, LPCXSTR lpszBankNumber) XCHAR* ptszBodyBuffer; XCHAR tszMsgBuffer[4096]; XCHAR tszPktBuffer[4096]; - XCHAR tszUrlBuffer[MAX_PATH]; + XCHAR tszUrlBuffer[XPATH_MAX]; XENGINE_BANKINFO st_BankInfo; RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); memset(tszPktBuffer, '\0', sizeof(tszPktBuffer)); - memset(tszUrlBuffer, '\0', MAX_PATH); + memset(tszUrlBuffer, '\0', XPATH_MAX); memset(&st_BankInfo, '\0', sizeof(XENGINE_BANKINFO)); memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Oil.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Oil.cpp index 3cbeffd..b549458 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Oil.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Oil.cpp @@ -8,7 +8,7 @@ bool HTTPTask_TaskGet_Oil(LPCXSTR lpszClientAddr, LPCXSTR lpszCityStr) XCHAR* ptszBodyBuffer; XCHAR tszMsgBuffer[4096]; XCHAR tszPktBuffer[4096]; - XCHAR tszUrlBuffer[MAX_PATH] = {}; + XCHAR tszUrlBuffer[XPATH_MAX] = {}; XENGINE_OILINFO st_OilInfo = {}; RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {}; //发送给客户端的参数 @@ -19,11 +19,11 @@ bool HTTPTask_TaskGet_Oil(LPCXSTR lpszClientAddr, LPCXSTR lpszCityStr) st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 - XCHAR tszURLEncoder[MAX_PATH] = {}; + XCHAR tszURLEncoder[XPATH_MAX] = {}; _xstprintf(tszUrlBuffer, st_ServiceConfig.st_XApi.tszOilUrl, lpszCityStr); #ifdef _MSC_BUILD - XCHAR tszUTFEncoder[MAX_PATH] = {}; + XCHAR tszUTFEncoder[XPATH_MAX] = {}; BaseLib_Charset_AnsiToUTF(tszUrlBuffer, tszUTFEncoder); Cryption_Codec_UrlEnCodec(tszUTFEncoder, _tcsxlen(tszUTFEncoder), tszURLEncoder); #else diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Translation.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Translation.cpp index e9015e3..bd696b6 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Translation.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Translation.cpp @@ -21,9 +21,9 @@ bool HTTPTask_TaskGet_Translation(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 - XCHAR tszSignStr[MAX_PATH] = {}; - XCHAR tszMD5Codec[MAX_PATH] = {}; - XCHAR tszMD5Str[MAX_PATH] = {}; + XCHAR tszSignStr[XPATH_MAX] = {}; + XCHAR tszMD5Codec[XPATH_MAX] = {}; + XCHAR tszMD5Str[XPATH_MAX] = {}; XCHAR tszURLStr[4096] = {}; XCHAR tszUTFBuffer[2048] = {}; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Weather.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Weather.cpp index fef5bde..030c807 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Weather.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Weather.cpp @@ -8,13 +8,13 @@ bool HTTPTask_TaskGet_WeatherInfo(LPCXSTR lpszClientAddr, LPCXSTR lpszAddrCode) XCHAR* ptszBodyBuffer; XCHAR tszMsgBuffer[4096]; XCHAR tszPktBuffer[4096]; - XCHAR tszUrlBuffer[MAX_PATH]; + XCHAR tszUrlBuffer[XPATH_MAX]; XENGINE_WEATHERINFO st_WeatherInfo = {}; RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {}; //发送给客户端的参数 memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); memset(tszPktBuffer, '\0', sizeof(tszPktBuffer)); - memset(tszUrlBuffer, '\0', MAX_PATH); + memset(tszUrlBuffer, '\0', XPATH_MAX); st_HDRParam.nHttpCode = 200; //HTTP CODE码 st_HDRParam.bIsClose = true; //收到回复后就关闭 diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp index b96b242..681ac9b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp @@ -7,14 +7,14 @@ static XNETHANDLE xhAudio = 0; static XNETHANDLE xhVideo = 0; static XHANDLE xhStream = NULL; -void CALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) +void XCALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) { if (!XClient_StreamPush_LiveVideo(xhStream, ptszAVBuffer, nAVLen)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("屏幕采集器,推流编码失败,需要关闭推流服务,错误码:%lX"), StreamClient_GetLastError()); } } -void CALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) +void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam) { if (!XClient_StreamPush_LiveAudio(xhStream, ptszAVBuffer, nAVLen)) { @@ -29,8 +29,8 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer int nBSType = 0; XCHAR* ptszRVBuffer = (XCHAR*)malloc(XENGINE_MEMORY_SIZE_MAX); XCHAR* ptszSDBuffer = (XCHAR*)malloc(XENGINE_MEMORY_SIZE_MAX); - XCHAR tszSrcBuffer[MAX_PATH]; - XCHAR tszDstBuffer[MAX_PATH]; + XCHAR tszSrcBuffer[XPATH_MAX]; + XCHAR tszDstBuffer[XPATH_MAX]; RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 memset(ptszRVBuffer, '\0', XENGINE_MEMORY_SIZE_MAX); @@ -45,8 +45,8 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bBackService) { - XCHAR tszUserName[MAX_PATH]; - XCHAR tszUserPass[MAX_PATH]; + XCHAR tszUserName[XPATH_MAX]; + XCHAR tszUserPass[XPATH_MAX]; memset(tszUserName, '\0', sizeof(tszUserName)); memset(tszUserPass, '\0', sizeof(tszUserPass)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h index 4b892e1..b97742b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.h @@ -1,5 +1,5 @@ #pragma once -void CALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* punStringY, int nYLen, uint8_t* punStringU, int nULen, uint8_t* punStringV, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); -void CALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* punStringAudio, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); +void XCALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* punStringY, int nYLen, uint8_t* punStringU, int nULen, uint8_t* punStringV, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); +void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* punStringAudio, int nVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam); bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp index 1190960..32fc0c3 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.cpp @@ -1,6 +1,6 @@ #include "../XEngine_Hdr.h" -void CALLBACK HTTPTask_TaskPost_Thread() +void XCALLBACK HTTPTask_TaskPost_Thread() { while (bIsRun) { @@ -105,8 +105,8 @@ bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int if (st_ServiceConfig.st_XVerifcation.st_VerSwitch.bDeamon) { - XCHAR tszUserName[MAX_PATH]; - XCHAR tszUserPass[MAX_PATH]; + XCHAR tszUserName[XPATH_MAX]; + XCHAR tszUserPass[XPATH_MAX]; memset(tszUserName, '\0', sizeof(tszUserName)); memset(tszUserPass, '\0', sizeof(tszUserPass)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.h index 999901c..05ca166 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Deamon.h @@ -1,4 +1,4 @@ #pragma once -void CALLBACK HTTPTask_TaskPost_Thread(); +void XCALLBACK HTTPTask_TaskPost_Thread(); bool HTTPTask_TaskPost_Deamon(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Image.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Image.cpp index 0146eff..5eab9a5 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Image.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_Image.cpp @@ -9,7 +9,7 @@ bool HTTPTask_TaskPost_Image(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int st_HDRParam.bIsClose = true; //收到回复后就关闭 #if (0 == _XENGINE_BUILD_SWITCH_OPENCV) int nMLen = 0; - XCHAR tszMSGBuffer[MAX_PATH] = {}; + XCHAR tszMSGBuffer[XPATH_MAX] = {}; st_HDRParam.nHttpCode = 501; HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMSGBuffer, &nMLen, &st_HDRParam); @@ -37,7 +37,7 @@ bool HTTPTask_TaskPost_Image(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int if (!st_ServiceConfig.st_XImageText.bEnable) { int nMLen = 0; - XCHAR tszMSGBuffer[MAX_PATH] = {}; + XCHAR tszMSGBuffer[XPATH_MAX] = {}; st_HDRParam.nHttpCode = 501; HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMSGBuffer, &nMLen, &st_HDRParam); @@ -93,7 +93,7 @@ bool HTTPTask_TaskPost_Image(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求设置图像数据失败,因为附加参数不正确,参数个数:%d"), lpszClientAddr, nListCount); return false; } - XCHAR tszFileExt[MAX_PATH]; + XCHAR tszFileExt[XPATH_MAX]; memset(tszFileExt, '\0', sizeof(tszFileExt)); memset(tszHTTPVlu, '\0', sizeof(tszHTTPVlu)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.cpp index 214d507..4d8d4d3 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.cpp @@ -1,6 +1,6 @@ #include "../XEngine_Hdr.h" -void CALLBACK HTTPTask_TastPost_P2PCallback(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam) +void XCALLBACK HTTPTask_TastPost_P2PCallback(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端,公网:%s,私网:%s,连接:%s,P2XP心跳离开"), pSt_P2PProtocol->tszPublicAddr, pSt_P2PProtocol->tszPrivateAddr, pSt_P2PProtocol->tszConnectAddr); } @@ -9,7 +9,7 @@ bool HTTPTask_TastPost_P2PClient(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nSDLen = 4096; int nRVLen = 4096; XCHAR tszSDBuffer[4096]; - XCHAR tszRVBuffer[MAX_PATH]; + XCHAR tszRVBuffer[XPATH_MAX]; RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; //发送给客户端的参数 memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.h index 87a364e..47f8d6f 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_P2PClient.h @@ -1,4 +1,4 @@ #pragma once -void CALLBACK HTTPTask_TastPost_P2PCallback(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam); +void XCALLBACK HTTPTask_TastPost_P2PCallback(XENGINE_P2XPPEER_PROTOCOL* pSt_P2PProtocol, XPVOID lParam); bool HTTPTask_TastPost_P2PClient(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int unOperatorCode); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_QRCode.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_QRCode.cpp index 4caddaa..52bffef 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_QRCode.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_QRCode.cpp @@ -9,7 +9,7 @@ bool HTTPTask_TaskPost_QRCode(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int st_HDRParam.bIsClose = true; //收到回复后就关闭 #if (0 == _XENGINE_BUILD_SWITCH_QRDECODEC) int nMLen = 0; - XCHAR tszMSGBuffer[MAX_PATH] = {}; + XCHAR tszMSGBuffer[XPATH_MAX] = {}; st_HDRParam.nHttpCode = 501; HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMSGBuffer, &nMLen, &st_HDRParam); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_ShortLink.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_ShortLink.cpp index fda040d..c9e4903 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_ShortLink.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_ShortLink.cpp @@ -6,8 +6,8 @@ bool HTTPTask_TaskPost_SLProxy(LPCXSTR lpszClientAddr, LPCXSTR lpszUriStr, XCHAR bool bFound = false; for (int i = 0; i < nHDRCount; i++) { - XCHAR tszKey[MAX_PATH]; - XCHAR tszValue[MAX_PATH]; + XCHAR tszKey[XPATH_MAX]; + XCHAR tszValue[XPATH_MAX]; memset(tszKey, '\0', sizeof(tszKey)); memset(tszValue, '\0', sizeof(tszValue)); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.cpp index 57c6c0d..0084030 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.cpp @@ -1,6 +1,6 @@ #include "../XEngine_Hdr.h" -void CALLBACK HTTPTask_TastPost_CBSocketTest(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam) +void XCALLBACK HTTPTask_TastPost_CBSocketTest(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam) { XENGINE_SOCKETTEST* pSt_SocketTest = (XENGINE_SOCKETTEST*)lParam; int nMsgLen = 0; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.h index efb7d17..18104a1 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_SocketTest.h @@ -1,4 +1,4 @@ #pragma once -void CALLBACK HTTPTask_TastPost_CBSocketTest(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam); +void XCALLBACK HTTPTask_TastPost_CBSocketTest(XNETHANDLE xhToken, LPCXSTR lpszAddr, int nPort, __int64x nNumber, __int64x nFailed, __int64x nSuccess, int nStatus, XPVOID lParam); bool HTTPTask_TastPost_SocketTest(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nType); \ No newline at end of file diff --git a/XEngine_Source/XEngine_UserProtocol.h b/XEngine_Source/XEngine_UserProtocol.h index c4d6f2e..10f6429 100644 --- a/XEngine_Source/XEngine_UserProtocol.h +++ b/XEngine_Source/XEngine_UserProtocol.h @@ -126,16 +126,16 @@ typedef struct //银行卡 typedef struct { - XCHAR tszBankNumber[MAX_PATH]; //银行卡号 - XCHAR tszBankName[MAX_PATH]; //银行卡名称 - XCHAR tszBankAbridge[MAX_PATH]; //银行卡缩写 + XCHAR tszBankNumber[XPATH_MAX]; //银行卡号 + XCHAR tszBankName[XPATH_MAX]; //银行卡名称 + XCHAR tszBankAbridge[XPATH_MAX]; //银行卡缩写 ENUM_XENGINE_APISERVICE_BANK_TYPE enBankType; }XENGINE_BANKINFO; //语言转换 typedef struct { - XCHAR tszSourceStr[MAX_PATH]; //原始字符串 - XCHAR tszDestStr[MAX_PATH]; //转换字符串 + XCHAR tszSourceStr[XPATH_MAX]; //原始字符串 + XCHAR tszDestStr[XPATH_MAX]; //转换字符串 XCHAR tszFromStr[64]; //原始类型 XCHAR tszToStr[64]; //目标类型 }XENGINE_LANGUAGEINFO; @@ -211,7 +211,7 @@ typedef struct { MODULEHELP_SOCKETTEST_RECONNECT st_SocketConn; MODULEHELP_SOCKETTEST_DATAS st_SocketData; - XCHAR tszAPIUrl[MAX_PATH]; + XCHAR tszAPIUrl[XPATH_MAX]; XNETHANDLE xhToken; int nType; //0,全部报告,其他结束统计报告 bool bTCP; @@ -220,11 +220,11 @@ typedef struct //短连接 typedef struct { - XCHAR tszFullUrl[MAX_PATH]; - XCHAR tszShotUrl[MAX_PATH]; - XCHAR tszKeyUrl[MAX_PATH]; - XCHAR tszMapUrl[MAX_PATH]; - XCHAR tszCvtUrl[MAX_PATH]; + XCHAR tszFullUrl[XPATH_MAX]; + XCHAR tszShotUrl[XPATH_MAX]; + XCHAR tszKeyUrl[XPATH_MAX]; + XCHAR tszMapUrl[XPATH_MAX]; + XCHAR tszCvtUrl[XPATH_MAX]; XCHAR tszCreateTime[64]; int nLength; int nID; @@ -233,11 +233,11 @@ typedef struct typedef struct { XCHAR tszMachineText[2048]; - XCHAR tszServiceName[MAX_PATH]; - XCHAR tszMachineName[MAX_PATH]; - XCHAR tszMachineUser[MAX_PATH]; - XCHAR tszMachineCode[MAX_PATH]; - XCHAR tszMachineSystem[MAX_PATH]; + XCHAR tszServiceName[XPATH_MAX]; + XCHAR tszMachineName[XPATH_MAX]; + XCHAR tszMachineUser[XPATH_MAX]; + XCHAR tszMachineCode[XPATH_MAX]; + XCHAR tszMachineSystem[XPATH_MAX]; XCHAR tszLastTime[64]; XCHAR tszCreateTime[64]; __int64x nTimeNumber; @@ -246,8 +246,8 @@ typedef struct //敏感词过滤器 typedef struct { - XCHAR tszWordsFrom[MAX_PATH]; - XCHAR tszWordsTo[MAX_PATH]; + XCHAR tszWordsFrom[XPATH_MAX]; + XCHAR tszWordsTo[XPATH_MAX]; XBYTE nLevel; //过滤级别,0替换,1删除,2禁止 }XENGINE_WORDFILTER; //图像基本属性 -- Gitee From 20f71633ceea83ef9d47098065146c937dc7db0f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 29 May 2025 11:36:26 +0800 Subject: [PATCH 12/22] fixed:build error --- .../ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp index 41b0895..811c0d6 100644 --- a/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp +++ b/XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SocketTest/ModuleHelp_SocketTest.cpp @@ -339,7 +339,7 @@ XHTHREAD CModuleHelp_SocketTest::ModuleHelp_SocketTest_ThreadConn(XPVOID lParam) break; } //设置TCP - XSOCKET hSocket = INVALID_SOCKET; + XSOCKET hSocket = XSOCKET_ERROR; if (XClient_TCPSelect_Create(&hSocket, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, 100)) { pSt_ReConnect->lpCall_ReConnect(pSt_ReConnect->xhToken, pSt_ReConnect->st_SocketConn.tszAddr, pSt_ReConnect->st_SocketConn.nPort, ++nNumber, nFailed, ++nSucess, 0, pSt_ReConnect->lParam); -- Gitee From 9f02430f6436a13589be13bd5956e482854ef893 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 4 Jun 2025 11:30:26 +0800 Subject: [PATCH 13/22] update:depend library --- XEngine_Source/XEngine_Depend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 78d2ea2..66e6bf3 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 78d2ea2cfcfa4701e122ee3e4ac536f712831f86 +Subproject commit 66e6bf39df14cd66d4bcbbb44a3e168ff75fed99 -- Gitee From d0392d151adcb0d54dd9754c15e2e7e9aa00d745 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 4 Jun 2025 11:30:54 +0800 Subject: [PATCH 14/22] modify:get more info support for plugin module --- .../XEngine_ModulePlugin/ModulePlugin_Error.h | 3 +- .../ModulePlugin_LibCore.cpp | 47 +++++++++---------- .../ModulePlugin_LibCore.h | 6 +++ .../XEngine_ModulePlugin.vcxproj | 2 +- XEngine_Source/XEngine_ModulePlugin/pch.h | 5 ++ .../Plugin_Password/Plugin_Password.cpp | 17 +++++++ .../Plugin_Password/Plugin_Password.h | 1 + 7 files changed, 54 insertions(+), 27 deletions(-) diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h index c24e97d..45e487c 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Error.h @@ -23,4 +23,5 @@ #define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND 0xE1008 //没有找到句柄 #define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_ISINITED 0xE1009 //已经初始化了,不需要再次初始化 #define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION 0xE100A //插件执行失败 -#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_MALLOC 0xE100B //申请内存失败 \ No newline at end of file +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_MALLOC 0xE100B //申请内存失败 +#define ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_GETINFO 0xE100C //获取插件信息失败 \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp index f0cffcc..ee6bb6c 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp @@ -248,11 +248,7 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l #endif if (NULL == st_FrameWork.fpCall_PluginCore_Init) { -#ifdef _MSC_BUILD - FreeLibrary(st_FrameWork.mhFile); -#else - dlclose(st_FrameWork.mhFile); -#endif + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPINIT; return false; @@ -264,11 +260,7 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l #endif if (NULL == st_FrameWork.fpCall_PluginCore_UnInit) { -#ifdef _MSC_BUILD - FreeLibrary(st_FrameWork.mhFile); -#else - dlclose(st_FrameWork.mhFile); -#endif + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPUNINIT; return false; @@ -280,11 +272,7 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l #endif if (NULL == st_FrameWork.fpCall_PluginCore_Call) { -#ifdef _MSC_BUILD - FreeLibrary(st_FrameWork.mhFile); -#else - dlclose(st_FrameWork.mhFile); -#endif + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPCALL; return false; @@ -296,26 +284,35 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l #endif if (NULL == st_FrameWork.fpCall_PluginCore_GetLastError) { -#ifdef _MSC_BUILD - FreeLibrary(st_FrameWork.mhFile); -#else - dlclose(st_FrameWork.mhFile); -#endif + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPERROR; return false; } + //得到插件信息函数 + XFreeModule(st_FrameWork.mhFile); + if (NULL == st_FrameWork.fpCall_PluginCore_GetInfo) + { + XFreeModule(st_FrameWork.mhFile); + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_GETINFO; + return false; + } //初始化内部模块 if (!st_FrameWork.fpCall_PluginCore_Init(lParam)) { -#ifdef _MSC_BUILD - FreeLibrary(st_FrameWork.mhFile); -#else - dlclose(st_FrameWork.mhFile); -#endif + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_INIT; return false; + } + //获得内部模块信息 + if (!st_FrameWork.fpCall_PluginCore_GetInfo(st_FrameWork.tszModuleName, st_FrameWork.tszModuleVer, st_FrameWork.tszModuleAuthor, st_FrameWork.tszModuleDesc)) + { + XFreeModule(st_FrameWork.mhFile); + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_INIT; + return false; } _tcsxcpy(st_FrameWork.tszModuleFile, lpszPluginFile); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h index 5fba9cc..48941cc 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h @@ -12,6 +12,7 @@ *********************************************************************/ typedef bool(*FPCall_PluginCore_Init)(XPVOID lParam); typedef void(*FPCall_PluginCore_UnInit)(); +typedef bool(*FPCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); typedef bool(*FPCall_PluginCore_Call)(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer, int nMsgLen); typedef XLONG(*FPCall_PluginCore_GetLastError)(); @@ -23,9 +24,14 @@ typedef struct void* mhFile; #endif XCHAR tszModuleFile[XPATH_MAX]; + XCHAR tszModuleName[128]; + XCHAR tszModuleAuthor[128]; + XCHAR tszModuleDesc[128]; + XCHAR tszModuleVer[64]; bool(*fpCall_PluginCore_Init)(XPVOID lParam); void(*fpCall_PluginCore_UnInit)(); + bool(*fpCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool(*fpCall_PluginCore_Call)(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer, int nMsgLen); XLONG(*fpCall_PluginCore_GetLastError)(); }PLUGINCORE_FRAMEWORK, * LPPLUGINCORE_FRAMEWORK; diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj index 25b81ef..81d9142 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.vcxproj @@ -99,7 +99,7 @@ true - $(XEngine_Include);$(IncludePath) + $(XEngine_Include);..\XEngine_ModulePlugin;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.h b/XEngine_Source/XEngine_ModulePlugin/pch.h index d315a09..2603b40 100644 --- a/XEngine_Source/XEngine_ModulePlugin/pch.h +++ b/XEngine_Source/XEngine_ModulePlugin/pch.h @@ -49,6 +49,11 @@ using namespace std; extern bool ModulePlugin_IsErrorOccur; extern XLONG ModulePlugin_dwErrorCode; + #ifdef _MSC_BUILD #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") + +#define XFreeModule FreeLibrary +#else +#define XFreeModule dlclose #endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp index cd8f6ca..740777b 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp @@ -51,6 +51,23 @@ void CPlugin_Password::PluginCore_UnInit() { Pass_IsErrorOccur = false; } +bool CPlugin_Password::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + Pass_IsErrorOccur = false; + + if ((NULL == ptszPluginName) || (NULL == ptszPluginVersion) || (NULL == ptszPluginAuthor) || (NULL == ptszPluginDesc)) + { + Pass_IsErrorOccur = true; + Pass_dwErrorCode = ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_PASS_PARAMENT; + return false; + } + + _tcsxcpy(ptszPluginName, "Password Generator"); + _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); + _tcsxcpy(ptszPluginAuthor, "qyt"); + _tcsxcpy(ptszPluginDesc, "Password Generator Plugin for XEngine API Service"); + return true; +} /******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h index bf79a25..0df65c7 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h @@ -19,6 +19,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); + bool PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Password_Creator(LPCXSTR lpszPassType, LPCXSTR lpszLength, XCHAR* ptszPassStr); -- Gitee From 616a9c5c3a2193533fe4aba79bcb9ba479dc831d Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 4 Jun 2025 13:40:06 +0800 Subject: [PATCH 15/22] modify:get info function support for lua plugin --- .../ModulePlugin_LibCore.cpp | 16 +++-------- .../ModulePlugin_LibCore.h | 4 +-- .../ModulePlugin_LuaCore.cpp | 27 ++++++++++++++++++- .../ModulePlugin_LuaCore.h | 4 +++ 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp index ee6bb6c..84316fa 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp @@ -178,12 +178,8 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Destroy() unordered_map::iterator stl_MapIterator = stl_MapFrameWork.begin(); for (; stl_MapIterator != stl_MapFrameWork.end(); stl_MapIterator++) { - stl_MapIterator->second.fpCall_PluginCore_UnInit(); -#ifdef _MSC_BUILD - FreeLibrary(stl_MapIterator->second.mhFile); -#else - dlclose(stl_MapIterator->second.mhFile); -#endif + stl_MapIterator->second.fpCall_PluginCore_UnInit(); + XFreeModule(stl_MapIterator->second.mhFile); } stl_MapFrameWork.clear(); st_csStl.unlock(); @@ -307,13 +303,7 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l return false; } //获得内部模块信息 - if (!st_FrameWork.fpCall_PluginCore_GetInfo(st_FrameWork.tszModuleName, st_FrameWork.tszModuleVer, st_FrameWork.tszModuleAuthor, st_FrameWork.tszModuleDesc)) - { - XFreeModule(st_FrameWork.mhFile); - ModulePlugin_IsErrorOccur = true; - ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_INIT; - return false; - } + st_FrameWork.fpCall_PluginCore_GetInfo(st_FrameWork.tszModuleName, st_FrameWork.tszModuleVer, st_FrameWork.tszModuleAuthor, st_FrameWork.tszModuleDesc); _tcsxcpy(st_FrameWork.tszModuleFile, lpszPluginFile); //添加模块属性到STL函数中 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h index 48941cc..d13eba2 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h @@ -12,7 +12,7 @@ *********************************************************************/ typedef bool(*FPCall_PluginCore_Init)(XPVOID lParam); typedef void(*FPCall_PluginCore_UnInit)(); -typedef bool(*FPCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +typedef void(*FPCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); typedef bool(*FPCall_PluginCore_Call)(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer, int nMsgLen); typedef XLONG(*FPCall_PluginCore_GetLastError)(); @@ -31,7 +31,7 @@ typedef struct bool(*fpCall_PluginCore_Init)(XPVOID lParam); void(*fpCall_PluginCore_UnInit)(); - bool(*fpCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); + void(*fpCall_PluginCore_GetInfo)(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool(*fpCall_PluginCore_Call)(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer, int nMsgLen); XLONG(*fpCall_PluginCore_GetLastError)(); }PLUGINCORE_FRAMEWORK, * LPPLUGINCORE_FRAMEWORK; diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp index 9b194a7..83262b8 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp @@ -273,7 +273,7 @@ bool CModulePlugin_LuaCore::ModulePlugin_LuaCore_Add(XNETHANDLE xhNet, LPCXSTR l ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION; return false; } - + //得到初始化函数 if (0 == lua_getglobal(st_LuaCore.pSt_LuaState, "PluginCore_Init")) { ModulePlugin_IsErrorOccur = true; @@ -294,6 +294,31 @@ bool CModulePlugin_LuaCore::ModulePlugin_LuaCore_Add(XNETHANDLE xhNet, LPCXSTR l return false; } lua_pop(st_LuaCore.pSt_LuaState, -1); + //得到信息函数 + if (0 == lua_getglobal(st_LuaCore.pSt_LuaState, "PluginCore_GetInfo")) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPINIT; + return false; + } + if (LUA_OK != lua_pcall(st_LuaCore.pSt_LuaState, 0, 4, 0)) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION; + return false; + } + if (!lua_toboolean(st_LuaCore.pSt_LuaState, -1)) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_EXECTION; + return false; + } + // Lua 栈从右到左是逆序压栈的,所以要从 -4 开始取 + _tcsxcpy(st_LuaCore.tszModuleName, lua_tostring(st_LuaCore.pSt_LuaState, -4)); + _tcsxcpy(st_LuaCore.tszModuleVer, lua_tostring(st_LuaCore.pSt_LuaState, -3)); + _tcsxcpy(st_LuaCore.tszModuleAuthor, lua_tostring(st_LuaCore.pSt_LuaState, -2)); + _tcsxcpy(st_LuaCore.tszModuleDesc, lua_tostring(st_LuaCore.pSt_LuaState, -1)); + lua_pop(st_LuaCore.pSt_LuaState, 4); st_csStl.lock(); stl_MapFrameWork.insert(make_pair(xhNet, st_LuaCore)); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h index 184c3f4..52526ce 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h @@ -13,6 +13,10 @@ typedef struct { XCHAR tszModuleFile[XPATH_MAX]; + XCHAR tszModuleName[128]; + XCHAR tszModuleAuthor[128]; + XCHAR tszModuleDesc[128]; + XCHAR tszModuleVer[64]; #if (1 == _XENGINE_BUILD_SWITCH_LUA) lua_State* pSt_LuaState; #endif -- Gitee From fa384755e3c42131dd42fdf87ab5975a3243cb82 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 4 Jun 2025 13:56:36 +0800 Subject: [PATCH 16/22] improved:plugin info get function support for module and lua --- .../ModulePlugin_Calculation.lua | 10 +++++ .../XEngine_LuaPlugin/ModulePlugin_Heart.lua | 10 +++++ .../XEngine_LuaPlugin/ModulePlugin_OSTime.lua | 9 ++++ .../ModulePlugin_BMIndex/BMIndex_Define.h | 29 +++++++++++++ .../ModulePlugin_BMIndex.def | 1 + .../Plugin_BMIndex/Plugin_BMIndex.cpp | 37 ++++++++++++++++ .../Plugin_BMIndex/Plugin_BMIndex.h | 1 + .../ModulePlugin_BMIndex/pch.cpp | 4 ++ .../ModulePlugin_Meter/ModulePlugin_Meter.def | 1 + .../ModulePlugin_Meter/PluginMeter_Define.h | 29 +++++++++++++ .../Plugin_Meter/Plugin_Meter.cpp | 37 ++++++++++++++++ .../Plugin_Meter/Plugin_Meter.h | 1 + .../ModulePlugin_Meter/pch.cpp | 4 ++ .../ModulePlugin_Password.def | 1 + .../ModulePlugin_Password/PluginPass_Define.h | 29 +++++++++++++ .../Plugin_Password/Plugin_Password.cpp | 42 ++++++++++++++----- .../Plugin_Password/Plugin_Password.h | 2 +- .../ModulePlugin_Password/pch.cpp | 4 ++ .../ModulePlugin_Timezone.def | 1 + .../Plugin_Timezone/Plugin_Timezone.cpp | 37 ++++++++++++++++ .../Plugin_Timezone/Plugin_Timezone.h | 1 + .../ModulePlugin_Timezone/Timezone_Define.h | 29 +++++++++++++ .../ModulePlugin_Timezone/pch.cpp | 4 ++ .../ModulePlugin_Zodiac.def | 1 + .../ModulePlugin_Zodiac/PluginZodiac_Define.h | 29 +++++++++++++ .../Plugin_Zodiac/Plugin_Zodiac.cpp | 37 ++++++++++++++++ .../Plugin_Zodiac/Plugin_Zodiac.h | 1 + .../ModulePlugin_Zodiac/pch.cpp | 4 ++ 28 files changed, 383 insertions(+), 12 deletions(-) diff --git a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Calculation.lua b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Calculation.lua index f3f8bac..8c6d932 100644 --- a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Calculation.lua +++ b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Calculation.lua @@ -51,4 +51,14 @@ function PluginCore_Call(lpszStrUrl, nListCount, lpszMsgBuffer, nMsgLen) return true end +function PluginCore_GetInfo() + + ptszPluginName = "cal" + ptszPluginVersion = "1.0.0.1001" + ptszPluginAuthor = "xengine" + ptszPluginDesc = "math cal for XEngine API Service" + + return ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc +end + -- PluginCore_Call("param1=1¶m2=2¶m3=0",3,"hello",5) \ No newline at end of file diff --git a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Heart.lua b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Heart.lua index f18c527..40e60dc 100644 --- a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Heart.lua +++ b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_Heart.lua @@ -21,4 +21,14 @@ function PluginCore_Call(lpszStrUrl, nListCount, lpszMsgBuffer, nMsgLen) end return true +end + +function PluginCore_GetInfo() + + ptszPluginName = "heart" + ptszPluginVersion = "1.0.0.1001" + ptszPluginAuthor = "xengine" + ptszPluginDesc = "heartbeat handle for XEngine API Service" + + return ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc end \ No newline at end of file diff --git a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_OSTime.lua b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_OSTime.lua index c416b91..1c4b91d 100644 --- a/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_OSTime.lua +++ b/XEngine_Release/XEngine_LuaPlugin/ModulePlugin_OSTime.lua @@ -45,4 +45,13 @@ function PluginCore_Call(lpszStrUrl, nListCount, lpszMsgBuffer, nMsgLen) return true end +function PluginCore_GetInfo() + + ptszPluginName = "time" + ptszPluginVersion = "1.0.0.1001" + ptszPluginAuthor = "xengine" + ptszPluginDesc = "get time info for XEngine API Service" + + return ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc +end -- PluginCore_Call("",0,"",0) \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/BMIndex_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/BMIndex_Define.h index bf60420..e394fbc 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/BMIndex_Define.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/BMIndex_Define.h @@ -41,6 +41,35 @@ extern "C" bool PluginCore_Init(XPVOID lParam = NULL); *********************************************************************/ extern "C" void PluginCore_UnInit(); /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/ModulePlugin_BMIndex.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/ModulePlugin_BMIndex.def index 78dedee..c3e2b07 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/ModulePlugin_BMIndex.def +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/ModulePlugin_BMIndex.def @@ -5,4 +5,5 @@ EXPORTS PluginCore_Init PluginCore_UnInit + PluginCore_GetInfo PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp index accc630..611038f 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp @@ -52,6 +52,43 @@ void CPlugin_BMIndex::PluginCore_UnInit() BMIndex_IsErrorOccur = false; } /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +void CPlugin_BMIndex::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + BMIndex_IsErrorOccur = false; + + ptszPluginName = (XCHAR*)"bmindex"; + ptszPluginVersion = (XCHAR*)"1.0.0.1001"; + ptszPluginAuthor = (XCHAR*)"xengine"; + ptszPluginDesc = (XCHAR*)""; +} +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.h index 8edef40..943d14d 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.h @@ -19,6 +19,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); + void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Timezone_BMIndex(LPCXSTR lpszHigh, LPCXSTR lpszWeight, XCHAR* ptszMsgBufer, int* pInt_Len); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.cpp index 95aa454..425d619 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.cpp @@ -33,6 +33,10 @@ extern "C" void PluginCore_UnInit() { m_PluginBMIndex.PluginCore_UnInit(); } +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginBMIndex.PluginCore_GetInfo(ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool PluginCore_Call(XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen) { return m_PluginBMIndex.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/ModulePlugin_Meter.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/ModulePlugin_Meter.def index 78dedee..c3e2b07 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/ModulePlugin_Meter.def +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/ModulePlugin_Meter.def @@ -5,4 +5,5 @@ EXPORTS PluginCore_Init PluginCore_UnInit + PluginCore_GetInfo PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/PluginMeter_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/PluginMeter_Define.h index ef80d1b..31f15fa 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/PluginMeter_Define.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/PluginMeter_Define.h @@ -94,6 +94,35 @@ extern "C" bool PluginCore_Init(XPVOID lParam = NULL); *********************************************************************/ extern "C" void PluginCore_UnInit(); /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp index d1de5b8..e7025c9 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp @@ -52,6 +52,43 @@ void CPlugin_Meter::PluginCore_UnInit() Meter_IsErrorOccur = false; } /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +void CPlugin_Meter::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + Meter_IsErrorOccur = false; + + ptszPluginName = (XCHAR *)"meter"; + ptszPluginVersion = (XCHAR*)"1.0.0.1001"; + ptszPluginAuthor = (XCHAR*)"xengine"; + ptszPluginDesc = (XCHAR*)""; +} +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.h index 99cb64c..caa3f38 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.h @@ -19,6 +19,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); + void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Meter_LengthConvert(int nSource, __int64x nValue, Json::Value *pSt_JsonObject); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.cpp index ffe1cc0..40bfdf3 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.cpp @@ -33,6 +33,10 @@ extern "C" void PluginCore_UnInit() { m_PluginMeter.PluginCore_UnInit(); } +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginMeter.PluginCore_GetInfo(ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool PluginCore_Call(XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen) { return m_PluginMeter.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def index 78dedee..c3e2b07 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/ModulePlugin_Password.def @@ -5,4 +5,5 @@ EXPORTS PluginCore_Init PluginCore_UnInit + PluginCore_GetInfo PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h index 0226572..de026ee 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/PluginPass_Define.h @@ -41,6 +41,35 @@ extern "C" bool PluginCore_Init(XPVOID lParam = NULL); *********************************************************************/ extern "C" void PluginCore_UnInit(); /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp index 740777b..ca13299 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.cpp @@ -51,22 +51,42 @@ void CPlugin_Password::PluginCore_UnInit() { Pass_IsErrorOccur = false; } -bool CPlugin_Password::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +/******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +void CPlugin_Password::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) { Pass_IsErrorOccur = false; - - if ((NULL == ptszPluginName) || (NULL == ptszPluginVersion) || (NULL == ptszPluginAuthor) || (NULL == ptszPluginDesc)) - { - Pass_IsErrorOccur = true; - Pass_dwErrorCode = ERROR_XENGINE_APISERVICE_PLUGIN_MODULE_PASS_PARAMENT; - return false; - } - _tcsxcpy(ptszPluginName, "Password Generator"); + _tcsxcpy(ptszPluginName, "pass"); _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); - _tcsxcpy(ptszPluginAuthor, "qyt"); + _tcsxcpy(ptszPluginAuthor, "xengine"); _tcsxcpy(ptszPluginDesc, "Password Generator Plugin for XEngine API Service"); - return true; } /******************************************************************** 函数名称:PluginCore_Call diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h index 0df65c7..8e9deae 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/Plugin_Password/Plugin_Password.h @@ -19,7 +19,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); - bool PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); + void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Password_Creator(LPCXSTR lpszPassType, LPCXSTR lpszLength, XCHAR* ptszPassStr); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp index 9ca32e6..43932f2 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Password/pch.cpp @@ -33,6 +33,10 @@ extern "C" void PluginCore_UnInit() { m_PluginPass.PluginCore_UnInit(); } +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginPass.PluginCore_GetInfo(ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool PluginCore_Call(XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen) { return m_PluginPass.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/ModulePlugin_Timezone.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/ModulePlugin_Timezone.def index 78dedee..c3e2b07 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/ModulePlugin_Timezone.def +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/ModulePlugin_Timezone.def @@ -5,4 +5,5 @@ EXPORTS PluginCore_Init PluginCore_UnInit + PluginCore_GetInfo PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.cpp index 6da661e..a71133e 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.cpp @@ -514,6 +514,43 @@ void CPlugin_Timezone::PluginCore_UnInit() stl_MapTimezone.clear(); } /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +void CPlugin_Timezone::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + Timezone_IsErrorOccur = false; + + _tcsxcpy(ptszPluginName, "timezone"); + _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); + _tcsxcpy(ptszPluginAuthor, "xengine"); + _tcsxcpy(ptszPluginDesc, "get timezone info for XEngine API Service"); +} +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h index d0dd3e9..f8e7df0 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Plugin_Timezone/Plugin_Timezone.h @@ -25,6 +25,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); + void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Timezone_Count(XCHAR* ptszMsgBufer, int* pInt_Len); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Timezone_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Timezone_Define.h index bf60420..e394fbc 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Timezone_Define.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/Timezone_Define.h @@ -41,6 +41,35 @@ extern "C" bool PluginCore_Init(XPVOID lParam = NULL); *********************************************************************/ extern "C" void PluginCore_UnInit(); /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/pch.cpp index 555197c..9a0f100 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/pch.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Timezone/pch.cpp @@ -33,6 +33,10 @@ extern "C" void PluginCore_UnInit() { m_PluginTimes.PluginCore_UnInit(); } +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginTimes.PluginCore_GetInfo(ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool PluginCore_Call(XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen) { return m_PluginTimes.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def index 78dedee..c3e2b07 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/ModulePlugin_Zodiac.def @@ -5,4 +5,5 @@ EXPORTS PluginCore_Init PluginCore_UnInit + PluginCore_GetInfo PluginCore_Call \ No newline at end of file diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h index 91ce91c..c4f5fdc 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/PluginZodiac_Define.h @@ -41,6 +41,35 @@ extern "C" bool PluginCore_Init(XPVOID lParam = NULL); *********************************************************************/ extern "C" void PluginCore_UnInit(); /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp index a9b9ab5..608a775 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.cpp @@ -64,6 +64,43 @@ void CPlugin_Zodiac::PluginCore_UnInit() Zodiac_IsErrorOccur = false; } /******************************************************************** +函数名称:PluginCore_GetInfo +函数功能:获取插件基础信息函数 + 参数.一:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.二:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.三:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.四:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +void CPlugin_Zodiac::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + Zodiac_IsErrorOccur = false; + + _tcsxcpy(ptszPluginName, "zodiac"); + _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); + _tcsxcpy(ptszPluginAuthor, "xengine"); + _tcsxcpy(ptszPluginDesc, "get zodiac plugin"); +} +/******************************************************************** 函数名称:PluginCore_Call 函数功能:调用插件 返回值 diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h index 3d6b0de..8820426 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/Plugin_Zodiac/Plugin_Zodiac.h @@ -19,6 +19,7 @@ public: public: bool PluginCore_Init(XPVOID lParam); void PluginCore_UnInit(); + void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool PluginCore_Call(XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen); protected: bool Plugin_Zodiac_Chinese(LPCXSTR lpszDate, XCHAR* ptszCZodiac); diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp index c598bc1..83930cb 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Zodiac/pch.cpp @@ -33,6 +33,10 @@ extern "C" void PluginCore_UnInit() { m_PluginZodiac.PluginCore_UnInit(); } +extern "C" void PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginZodiac.PluginCore_GetInfo(ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool PluginCore_Call(XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBuffer, int nMsgLen) { return m_PluginZodiac.PluginCore_Call(pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); -- Gitee From f05e87ff4a64149ca78bd727f255378041ed0464 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 5 Jun 2025 13:54:14 +0800 Subject: [PATCH 17/22] modify:delete plugin configure and plugin auto load support --- .../XEngine_Config/XEngine_Config.json | 5 +- .../XEngine_Config/XEngine_Plugin.json | 46 --------- .../ModuleConfig_Define.h | 36 +------ .../ModuleConfigure_Json.cpp | 99 +------------------ .../ModuleConfigure_Json.h | 1 - .../XEngine_ModuleConfigure.def | 1 - .../XEngine_ModuleConfigure/pch.cpp | 4 - .../ModulePlugin_Define.h | 79 +++++++++++++-- .../ModulePlugin_LibCore.cpp | 66 ++++++++++++- .../ModulePlugin_LibCore.h | 1 + .../ModulePlugin_Loader.cpp | 89 ++++++++++++++--- .../ModulePlugin_Loader/ModulePlugin_Loader.h | 9 +- .../ModulePlugin_LuaCore.cpp | 53 ++++++++++ .../ModulePlugin_LuaCore.h | 1 + .../XEngine_ModulePlugin.def | 2 + XEngine_Source/XEngine_ModulePlugin/pch.cpp | 12 ++- .../XEngine_HttpApp/XEngine_Hdr.h | 1 - .../XEngine_HttpApp/XEngine_HttpApp.cpp | 55 +++++------ .../XEngine_TaskGet/TaskGet_Reload.cpp | 61 +++--------- 19 files changed, 331 insertions(+), 290 deletions(-) delete mode 100644 XEngine_Release/XEngine_Config/XEngine_Plugin.json diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index f6fdc0e..0d04c3a 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -24,7 +24,7 @@ "LogType":32 }, "XSql":{ - "bEnable":true, + "bEnable":false, "SQLAddr":"10.0.2.6", "SQLPort":3306, "SQLUser":"root", @@ -42,7 +42,8 @@ }, "XPlugin":{ "bEnable":true, - "tszPlugin":"./XEngine_Config/XEngine_Plugin.json" + "tszLibPlugin":"./XEngine_LibPlugin", + "tszLuaPlugin":"./XEngine_LuaPlugin" }, "XConfig":{ "st_ConfigQRCode":{ diff --git a/XEngine_Release/XEngine_Config/XEngine_Plugin.json b/XEngine_Release/XEngine_Config/XEngine_Plugin.json deleted file mode 100644 index 4298369..0000000 --- a/XEngine_Release/XEngine_Config/XEngine_Plugin.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "PluginModule":[ - { - "PluginEnable":true, - "PluginMethod":"zodiac", - "PluginFile":"./XEngine_LibPlugin/libModulePlugin_Zodiac" - }, - { - "PluginEnable":true, - "PluginMethod":"pass", - "PluginFile":"./XEngine_LibPlugin/libModulePlugin_Password" - }, - { - "PluginEnable":true, - "PluginMethod":"timezone", - "PluginFile":"./XEngine_LibPlugin/libModulePlugin_Timezone" - }, - { - "PluginEnable":true, - "PluginMethod":"bmindex", - "PluginFile":"./XEngine_LibPlugin/libModulePlugin_BMIndex" - }, - { - "PluginEnable":true, - "PluginMethod":"meter", - "PluginFile":"./XEngine_LibPlugin/libModulePlugin_Meter" - } - ], - "PluginLua":[ - { - "PluginEnable":true, - "PluginMethod":"cal", - "PluginFile":"./XEngine_LuaPlugin/ModulePlugin_Calculation.lua" - }, - { - "PluginEnable":true, - "PluginMethod":"time", - "PluginFile":"./XEngine_LuaPlugin/ModulePlugin_OSTime.lua" - }, - { - "PluginEnable":true, - "PluginMethod":"heart", - "PluginFile":"./XEngine_LuaPlugin/ModulePlugin_Heart.lua" - } - ] -} \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 76d7b61..10ce8de 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -66,8 +66,9 @@ typedef struct }st_XApi; struct { - bool bEnable; //是否启用 - XCHAR tszPlugin[XPATH_MAX]; //配置文件地址 + bool bEnable; //是否启用 + XCHAR tszLibPlugin[XPATH_MAX]; + XCHAR tszLuaPlugin[XPATH_MAX]; }st_XPlugin; struct { @@ -128,18 +129,6 @@ typedef struct list* pStl_ListVer; }st_XVer; }XENGINE_SERVICECONFIG; -//插件 -typedef struct -{ - bool bEnable; - XCHAR tszPluginMethod[XPATH_MAX]; - XCHAR tszPluginFile[XPATH_MAX]; -}XENGINE_PLUGININFO; -typedef struct -{ - list* pStl_ListPluginModule; - list* pStl_ListPluginLua; -}XENGINE_PLUGINCONFIG; ////////////////////////////////////////////////////////////////////////// typedef struct { @@ -215,25 +204,6 @@ extern "C" bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVIC *********************************************************************/ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); /******************************************************************** -函数名称:ModuleConfigure_Json_PluginFile -函数功能:读取JSON配置文件 - 参数.一:lpszConfigFile - In/Out:In - 类型:常量字符指针 - 可空:N - 意思:输入要读取的配置文件 - 参数.二:pSt_PluginConfig - In/Out:Out - 类型:数据结构指针 - 可空:N - 意思:输出插件配置信息 -返回值 - 类型:逻辑型 - 意思:是否成功 -备注: -*********************************************************************/ -extern "C" bool ModuleConfigure_Json_PluginFile(LPCXSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig); -/******************************************************************** 函数名称:ModuleConfigure_Json_DeamonList 函数功能:读取JSON配置文件 参数.一:lpszConfigFile diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 19d6ff8..301ddc3 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -146,7 +146,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLUser, st_JsonXSql["SQLUser"].asCString()); _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLPass, st_JsonXSql["SQLPass"].asCString()); - if (st_JsonRoot["XPlugin"].empty() || (2 != st_JsonRoot["XPlugin"].size())) + if (st_JsonRoot["XPlugin"].empty() || (3 != st_JsonRoot["XPlugin"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPLUGIN; @@ -154,7 +154,8 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE } Json::Value st_JsonXPlugin = st_JsonRoot["XPlugin"]; pSt_ServerConfig->st_XPlugin.bEnable = st_JsonXPlugin["bEnable"].asBool(); - _tcsxcpy(pSt_ServerConfig->st_XPlugin.tszPlugin, st_JsonXPlugin["tszPlugin"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XPlugin.tszLibPlugin, st_JsonXPlugin["tszLibPlugin"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XPlugin.tszLuaPlugin, st_JsonXPlugin["tszLuaPlugin"].asCString()); if (st_JsonRoot["XConfig"].empty() || (4 != st_JsonRoot["XConfig"].size())) { @@ -306,100 +307,6 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigF return true; } /******************************************************************** -函数名称:ModuleConfigure_Json_PluginFile -函数功能:读取JSON配置文件 - 参数.一:lpszConfigFile - In/Out:In - 类型:常量字符指针 - 可空:N - 意思:输入要读取的配置文件 - 参数.二:pSt_PluginConfig - In/Out:Out - 类型:数据结构指针 - 可空:N - 意思:输出插件配置信息 -返回值 - 类型:逻辑型 - 意思:是否成功 -备注: -*********************************************************************/ -bool CModuleConfigure_Json::ModuleConfigure_Json_PluginFile(LPCXSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig) -{ - Config_IsErrorOccur = false; - - if ((NULL == lpszConfigFile) || (NULL == pSt_PluginConfig)) - { - Config_IsErrorOccur = true; - Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARAMENT; - return false; - } - Json::Value st_JsonRoot; - JSONCPP_STRING st_JsonError; - Json::CharReaderBuilder st_JsonBuilder; - //读取配置文件所有内容到缓冲区 - FILE* pSt_File = _xtfopen(lpszConfigFile, _X("rb")); - if (NULL == pSt_File) - { - Config_IsErrorOccur = true; - Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; - return false; - } - XCHAR tszMsgBuffer[8192] = {}; - size_t nRet = fread(tszMsgBuffer, 1, sizeof(tszMsgBuffer), pSt_File); - fclose(pSt_File); - //开始解析配置文件 - std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); - if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nRet, &st_JsonRoot, &st_JsonError)) - { - Config_IsErrorOccur = true; - Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; - return false; - } - //申请内存 - pSt_PluginConfig->pStl_ListPluginLua = new list; - pSt_PluginConfig->pStl_ListPluginModule = new list; - if (NULL == pSt_PluginConfig->pStl_ListPluginLua || NULL == pSt_PluginConfig->pStl_ListPluginModule) - { - Config_IsErrorOccur = true; - Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_MALLOC; - return false; - } - //解析module列表 - Json::Value st_JsonModuleArray = st_JsonRoot["PluginModule"]; - for (unsigned int i = 0; i < st_JsonModuleArray.size(); i++) - { - XENGINE_PLUGININFO st_PluginInfo; - memset(&st_PluginInfo, '\0', sizeof(XENGINE_PLUGININFO)); - - st_PluginInfo.bEnable = st_JsonModuleArray[i]["PluginEnable"].asBool(); - _tcsxcpy(st_PluginInfo.tszPluginFile, st_JsonModuleArray[i]["PluginFile"].asCString()); -#ifdef _MSC_BUILD - _tcsxcat(st_PluginInfo.tszPluginFile, ".dll"); -#elif __linux__ - _tcsxcat(st_PluginInfo.tszPluginFile, ".so"); -#else - _tcsxcat(st_PluginInfo.tszPluginFile, ".dylib"); -#endif - _tcsxcpy(st_PluginInfo.tszPluginMethod, st_JsonModuleArray[i]["PluginMethod"].asCString()); - - pSt_PluginConfig->pStl_ListPluginModule->push_back(st_PluginInfo); - } - //解析lua列表 - Json::Value st_JsonLuaArray = st_JsonRoot["PluginLua"]; - for (unsigned int i = 0; i < st_JsonLuaArray.size(); i++) - { - XENGINE_PLUGININFO st_PluginInfo; - memset(&st_PluginInfo, '\0', sizeof(XENGINE_PLUGININFO)); - - st_PluginInfo.bEnable = st_JsonLuaArray[i]["PluginEnable"].asBool(); - _tcsxcpy(st_PluginInfo.tszPluginFile, st_JsonLuaArray[i]["PluginFile"].asCString()); - _tcsxcpy(st_PluginInfo.tszPluginMethod, st_JsonLuaArray[i]["PluginMethod"].asCString()); - - pSt_PluginConfig->pStl_ListPluginLua->push_back(st_PluginInfo); - } - return true; -} -/******************************************************************** 函数名称:ModuleConfigure_Json_DeamonList 函数功能:读取JSON配置文件 参数.一:lpszConfigFile diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h index 362e773..3a5f847 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h @@ -19,7 +19,6 @@ public: public: bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); - bool ModuleConfigure_Json_PluginFile(LPCXSTR lpszConfigFile, XENGINE_PLUGINCONFIG* pSt_PluginConfig); bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST* pSt_AppConfig); protected: private: diff --git a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def index 5fe48fa..5332cde 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def +++ b/XEngine_Source/XEngine_ModuleConfigure/XEngine_ModuleConfigure.def @@ -5,5 +5,4 @@ EXPORTS ModuleConfigure_Json_File ModuleConfigure_Json_VersionFile - ModuleConfigure_Json_PluginFile ModuleConfigure_Json_DeamonList \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp index d903b3c..afb6ec4 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -37,10 +37,6 @@ extern "C" bool ModuleConfigure_Json_VersionFile(LPCXSTR lpszConfigFile, XENGINE { return m_ConfigJson.ModuleConfigure_Json_VersionFile(lpszConfigFile, pSt_ServerConfig); } -extern "C" bool ModuleConfigure_Json_PluginFile(LPCXSTR lpszConfigFile, XENGINE_PLUGINCONFIG * pSt_PluginConfig) -{ - return m_ConfigJson.ModuleConfigure_Json_PluginFile(lpszConfigFile, pSt_PluginConfig); -} extern "C" bool ModuleConfigure_Json_DeamonList(LPCXSTR lpszConfigFile, XENGINE_DEAMONAPPLIST * pSt_AppConfig) { return m_ConfigJson.ModuleConfigure_Json_DeamonList(lpszConfigFile, pSt_AppConfig); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h index a707ced..938e761 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -100,6 +100,40 @@ extern "C" bool ModulePlugin_LibCore_Push(XNETHANDLE * pxhNet, LPCXSTR lpszPlugi *********************************************************************/ extern "C" bool ModulePlugin_LibCore_Exec(XNETHANDLE xhModule, XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer = NULL, int nMsgLen = 0); /******************************************************************** +函数名称:ModulePlugin_LibCore_Get +函数功能:获取插件基础信息函数 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModulePlugin_LibCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:ModulePlugin_LibCore_Destroy 函数功能:销毁插件核心并且清理资源 返回值 @@ -194,6 +228,40 @@ extern "C" bool ModulePlugin_LuaCore_Push(XNETHANDLE* pxhModule, LPCXSTR lpszPlu *********************************************************************/ extern "C" bool ModulePlugin_LuaCore_Exec(XNETHANDLE xhModule, XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer = NULL, int nMsgLen = 0); /******************************************************************** +函数名称:ModulePlugin_LuaCore_Get +函数功能:获取插件基础信息函数 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModulePlugin_LuaCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); +/******************************************************************** 函数名称:ModulePlugin_LuaCore_Destroy 函数功能:销毁插件核心并且清理资源 返回值 @@ -217,17 +285,12 @@ extern "C" bool ModulePlugin_Loader_Init(); /******************************************************************** 函数名称:ModulePlugin_Loader_Insert 函数功能:插入一个模块到加载器 - 参数.一:lpszModuleMethod - In/Out:In - 类型:常量字符指针 - 可空:N - 意思:插件方法名 - 参数.二:lpszModuleName + 参数.一:lpszModuleName In/Out:In 类型:常量字符指针 可空:N 意思:插件路径 - 参数.三:nType + 参数.二:nType In/Out:In 类型:整数型 可空:Y @@ -237,7 +300,7 @@ extern "C" bool ModulePlugin_Loader_Init(); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, LPCXSTR lpszModuleName, int nType = 0); +extern "C" bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType = 0); /******************************************************************** 函数名称:ModulePlugin_Loader_Find 函数功能:查找方法是否注册 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp index 84316fa..82086cc 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp @@ -156,6 +156,61 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Exec(XNETHANDLE xhModule, XCHAR return true; } /******************************************************************** +函数名称:ModulePlugin_LibCore_Get +函数功能:获取插件基础信息函数 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModulePlugin_LibCore::ModulePlugin_LibCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + ModulePlugin_IsErrorOccur = false; + + st_csStl.lock_shared(); + //执行指定插件函数 + unordered_map::const_iterator stl_MapIterator = stl_MapFrameWork.find(xhModule); + if (stl_MapIterator == stl_MapFrameWork.end()) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_csStl.unlock_shared(); + return false; + } + _tcsxcpy(ptszPluginName, stl_MapIterator->second.tszModuleName); + _tcsxcpy(ptszPluginVersion, stl_MapIterator->second.tszModuleVer); + _tcsxcpy(ptszPluginAuthor, stl_MapIterator->second.tszModuleAuthor); + _tcsxcpy(ptszPluginDesc, stl_MapIterator->second.tszModuleDesc); + st_csStl.unlock_shared(); + + return true; +} +/******************************************************************** 函数名称:ModulePlugin_LibCore_Destroy 函数功能:销毁插件核心并且清理资源 返回值 @@ -285,13 +340,16 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPERROR; return false; } - //得到插件信息函数 - XFreeModule(st_FrameWork.mhFile); +#ifdef _MSC_BUILD + st_FrameWork.fpCall_PluginCore_GetInfo = (FPCall_PluginCore_GetInfo)GetProcAddress(st_FrameWork.mhFile, _X("PluginCore_GetInfo")); +#else + * (void**)(&st_FrameWork.fpCall_PluginCore_GetInfo) = dlsym(st_FrameWork.mhFile, _X("PluginCore_GetInfo")); +#endif if (NULL == st_FrameWork.fpCall_PluginCore_GetInfo) { - XFreeModule(st_FrameWork.mhFile); + XFreeModule(st_FrameWork.mhFile); ModulePlugin_IsErrorOccur = true; - ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_GETINFO; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_FPERROR; return false; } //初始化内部模块 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h index d13eba2..67a6fc2 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.h @@ -45,6 +45,7 @@ public: bool ModulePlugin_LibCore_Init(); bool ModulePlugin_LibCore_Push(XNETHANDLE* pxhModule, LPCXSTR lpszPluginFile, XPVOID lParam = NULL); bool ModulePlugin_LibCore_Exec(XNETHANDLE xhModule, XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer = NULL, int nMsgLen = 0); + bool ModulePlugin_LibCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool ModulePlugin_LibCore_Destroy(); protected: bool ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR lpszPluginFile, XPVOID lParam = NULL); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp index 6899f6f..3aac58c 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -38,17 +38,12 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Init() /******************************************************************** 函数名称:ModulePlugin_Loader_Insert 函数功能:插入一个模块到加载器 - 参数.一:lpszModuleMethod - In/Out:In - 类型:常量字符指针 - 可空:N - 意思:插件方法名 - 参数.二:lpszModuleName + 参数.一:lpszModuleName In/Out:In 类型:常量字符指针 可空:N 意思:插件路径 - 参数.三:nType + 参数.二:nType In/Out:In 类型:整数型 可空:Y @@ -58,11 +53,11 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Init() 意思:是否成功 备注: *********************************************************************/ -bool CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, LPCXSTR lpszModuleName, int nType /* = 0 */) +bool CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType /* = 0 */) { ModulePlugin_IsErrorOccur = false; - if ((NULL == lpszModuleMethod) || (NULL == lpszModuleName)) + if (NULL == lpszModuleName) { ModulePlugin_IsErrorOccur = true; ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; @@ -73,7 +68,6 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, st_PluginLoader.nType = nType; _tcsxcpy(st_PluginLoader.tszModuleFile, lpszModuleName); - _tcsxcpy(st_PluginLoader.tszModuleMethod, lpszModuleMethod); if (0 == nType) { @@ -81,6 +75,7 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, { return false; } + ModulePlugin_LibCore_Get(st_PluginLoader.xhToken, st_PluginLoader.tszModuleName, st_PluginLoader.tszModuleVer, st_PluginLoader.tszModuleAuthor, st_PluginLoader.tszModuleDesc); } else { @@ -88,10 +83,11 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, { return false; } + ModulePlugin_LuaCore_Get(st_PluginLoader.xhToken, st_PluginLoader.tszModuleName, st_PluginLoader.tszModuleVer, st_PluginLoader.tszModuleAuthor, st_PluginLoader.tszModuleDesc); } st_Locker.lock(); - stl_MapLoader.insert(make_pair(lpszModuleMethod, st_PluginLoader)); + stl_MapLoader.insert(make_pair(st_PluginLoader.tszModuleName, st_PluginLoader)); st_Locker.unlock(); return true; } @@ -140,6 +136,77 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* return true; } /******************************************************************** +函数名称:ModulePlugin_LibCore_Get +函数功能:获取插件基础信息函数 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModulePlugin_Loader::ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR* ptszPluginName /* = NULL */, XCHAR* ptszPluginVersion /* = NULL */, XCHAR* ptszPluginAuthor /* = NULL */, XCHAR* ptszPluginDesc /* = NULL */) +{ + ModulePlugin_IsErrorOccur = false; + + if (NULL == ptszPluginName || NULL == ptszPluginVersion || NULL == ptszPluginAuthor || NULL == ptszPluginDesc) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; + return false; + } + st_Locker.lock_shared(); + unordered_map::const_iterator stl_MapIterator = stl_MapLoader.find(lpszMethodName); + if (stl_MapIterator == stl_MapLoader.end()) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_Locker.unlock_shared(); + return false; + } + if (NULL != ptszPluginName) + { + _tcsxcpy(ptszPluginName, stl_MapIterator->second.tszModuleName); + } + if (NULL != ptszPluginVersion) + { + _tcsxcpy(ptszPluginVersion, stl_MapIterator->second.tszModuleVer); + } + if (NULL != ptszPluginAuthor) + { + _tcsxcpy(ptszPluginAuthor, stl_MapIterator->second.tszModuleAuthor); + } + if (NULL != ptszPluginDesc) + { + _tcsxcpy(ptszPluginDesc, stl_MapIterator->second.tszModuleDesc); + } + st_Locker.unlock_shared(); + return true; +} +/******************************************************************** 函数名称:ModulePlugin_Loader_Exec 函数功能:执行一次插件 参数.一:lpszMethodName diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h index 292d71e..ad1bc91 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -13,7 +13,11 @@ typedef struct { XCHAR tszModuleFile[XPATH_MAX]; - XCHAR tszModuleMethod[XPATH_MAX]; + XCHAR tszModuleName[128]; + XCHAR tszModuleAuthor[128]; + XCHAR tszModuleDesc[128]; + XCHAR tszModuleVer[128]; + XNETHANDLE xhToken; int nType; }PLUGINCORE_LOADER, * LPPLUGINCORE_LOADER; @@ -25,8 +29,9 @@ public: ~CModulePlugin_Loader(); public: bool ModulePlugin_Loader_Init(); - bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, LPCXSTR lpszModuleName, int nType = 0); + bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType = 0); bool ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* pInt_Type); + bool ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR* ptszPluginName = NULL, XCHAR* ptszPluginVersion = NULL, XCHAR* ptszPluginAuthor = NULL, XCHAR* ptszPluginDesc = NULL); bool ModulePlugin_Loader_Exec(LPCXSTR lpszMethodName, XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen); bool ModulePlugin_Loader_Destory(); protected: diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp index 83262b8..f215bf7 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.cpp @@ -183,6 +183,59 @@ bool CModulePlugin_LuaCore::ModulePlugin_LuaCore_Exec(XNETHANDLE xhModule, XCHAR return true; } /******************************************************************** +函数名称:ModulePlugin_LuaCore_Get +函数功能:获取插件基础信息函数 + 参数.一:xhModule + In/Out:In + 类型:句柄 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModulePlugin_LuaCore::ModulePlugin_LuaCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + ModulePlugin_IsErrorOccur = false; + + st_csStl.lock_shared(); + unordered_map::const_iterator stl_MapIterator = stl_MapFrameWork.find(xhModule); + if (stl_MapIterator == stl_MapFrameWork.end()) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + st_csStl.unlock_shared(); + return false; + } + _tcsxcpy(ptszPluginName, stl_MapIterator->second.tszModuleName); + _tcsxcpy(ptszPluginVersion, stl_MapIterator->second.tszModuleVer); + _tcsxcpy(ptszPluginAuthor, stl_MapIterator->second.tszModuleAuthor); + _tcsxcpy(ptszPluginDesc, stl_MapIterator->second.tszModuleDesc); + st_csStl.unlock_shared(); + return true; +} +/******************************************************************** 函数名称:ModulePlugin_LuaCore_Destroy 函数功能:销毁插件核心并且清理资源 返回值 diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h index 52526ce..a504d9a 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LuaCore/ModulePlugin_LuaCore.h @@ -31,6 +31,7 @@ public: bool ModulePlugin_LuaCore_Init(); bool ModulePlugin_LuaCore_Push(XNETHANDLE* pxhModule, LPCXSTR lpszPluginFile, XPVOID lParam = NULL); bool ModulePlugin_LuaCore_Exec(XNETHANDLE xhModule, XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszMsgBufer = NULL, int nMsgLen = 0); + bool ModulePlugin_LuaCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc); bool ModulePlugin_LuaCore_Destroy(); protected: bool ModulePlugin_LuaCore_Add(XNETHANDLE xhNet, LPCXSTR lpszPluginFile, XPVOID lParam = NULL); diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def index 09acda4..e0fc173 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -6,11 +6,13 @@ EXPORTS ModulePlugin_LibCore_Init ModulePlugin_LibCore_Push ModulePlugin_LibCore_Exec + ModulePlugin_LibCore_Get ModulePlugin_LibCore_Destroy ModulePlugin_LuaCore_Init ModulePlugin_LuaCore_Push ModulePlugin_LuaCore_Exec + ModulePlugin_LuaCore_Get ModulePlugin_LuaCore_Destroy ModulePlugin_Loader_Init diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.cpp b/XEngine_Source/XEngine_ModulePlugin/pch.cpp index 6593af1..336b657 100644 --- a/XEngine_Source/XEngine_ModulePlugin/pch.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -45,6 +45,10 @@ extern "C" bool ModulePlugin_LibCore_Exec(XNETHANDLE xhModule, XCHAR * **pppHDRL { return m_PluginLib.ModulePlugin_LibCore_Exec(xhModule, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); } +extern "C" bool ModulePlugin_LibCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginLib.ModulePlugin_LibCore_Get(xhModule, ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool ModulePlugin_LibCore_Destroy() { return m_PluginLib.ModulePlugin_LibCore_Destroy(); @@ -68,6 +72,10 @@ extern "C" bool ModulePlugin_LuaCore_Exec(XNETHANDLE xhModule, XCHAR * **pppHDRL { return m_PluginLua.ModulePlugin_LuaCore_Exec(xhModule, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen, lpszMsgBufer, nMsgLen); } +extern "C" bool ModulePlugin_LuaCore_Get(XNETHANDLE xhModule, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginLua.ModulePlugin_LuaCore_Get(xhModule, ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool ModulePlugin_LuaCore_Destroy() { return m_PluginLua.ModulePlugin_LuaCore_Destroy(); @@ -75,9 +83,9 @@ extern "C" bool ModulePlugin_LuaCore_Destroy() /********************************************************************************* * 加载器导出函数定义 * *********************************************************************************/ -extern "C" bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleMethod, LPCXSTR lpszModuleName, int nType) +extern "C" bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType) { - return m_PluginLoader.ModulePlugin_Loader_Insert(lpszModuleMethod, lpszModuleName, nType); + return m_PluginLoader.ModulePlugin_Loader_Insert(lpszModuleName, nType); } extern "C" bool ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* pInt_Type) { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h index 90c07fc..877902b 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h @@ -139,7 +139,6 @@ extern XHANDLE xhHTTPPool; extern unique_ptr pSTDThread_Deamon; //配置文件 extern XENGINE_SERVICECONFIG st_ServiceConfig; -extern XENGINE_PLUGINCONFIG st_PluginConfig; extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig; //连接库 #ifdef _MSC_BUILD diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index 6082d32..762ba19 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -23,7 +23,6 @@ XHANDLE xhHTTPPool = NULL; unique_ptr pSTDThread_Deamon = NULL; //配置文件 XENGINE_SERVICECONFIG st_ServiceConfig; -XENGINE_PLUGINCONFIG st_PluginConfig; XENGINE_DEAMONAPPLIST st_DeamonAppConfig; void ServiceApp_Stop(int signo) @@ -146,7 +145,6 @@ int main(int argc, char** argv) memset(&st_XLogConfig, '\0', sizeof(HELPCOMPONENTS_XLOG_CONFIGURE)); memset(&st_ServiceConfig, '\0', sizeof(XENGINE_SERVICECONFIG)); - memset(&st_PluginConfig, '\0', sizeof(XENGINE_PLUGINCONFIG)); //初始化参数 if (!XEngine_Configure_Parament(argc, argv)) @@ -401,11 +399,6 @@ int main(int argc, char** argv) //初始化插件配置 if (st_ServiceConfig.st_XPlugin.bEnable) { - if (!ModuleConfigure_Json_PluginFile(st_ServiceConfig.st_XPlugin.tszPlugin, &st_PluginConfig)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Lib插件配置文件失败,错误:%lX"), ModuleConfigure_GetLastError()); - goto XENGINE_SERVICEAPP_EXIT; - } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化插件配置文件成功")); //启动插件 if (!ModulePlugin_Loader_Init()) @@ -414,51 +407,53 @@ int main(int argc, char** argv) goto XENGINE_SERVICEAPP_EXIT; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化插件系统成功,开始加载插件")); - //加载插件 - list::const_iterator stl_ListIterator = st_PluginConfig.pStl_ListPluginModule->begin(); - for (int i = 1; stl_ListIterator != st_PluginConfig.pStl_ListPluginModule->end(); stl_ListIterator++, i++) - { - if (stl_ListIterator->bEnable) + //枚举插件 + int nLibCount = 0; + XCHAR** pptszListFile; + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLibPlugin, &pptszListFile, &nLibCount, false, 1); + for (int i = 0; i < nLibCount; i++) + { + XCHAR tszFileExt[64] = {}; + BaseLib_String_GetFileAndPath(pptszListFile[i], NULL, NULL, NULL, tszFileExt); + if (0 == _tcsxnicmp(tszFileExt, _X("dll"), 3) || 0 == _tcsxnicmp(tszFileExt, _X("so"), 2)) { - if (ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, 0)) + //加载插件 + if (ModulePlugin_Loader_Insert(pptszListFile[i], 0)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,路径:%s"), i, pptszListFile[i]); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载失败,方法:%s,路径:%s,错误:%lX"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, ModulePlugin_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), i, pptszListFile[i], ModulePlugin_GetLastError()); } } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } } + BaseLib_Memory_Free((XPPPMEM)&pptszListFile, nLibCount); + #if (1 == _XENGINE_BUILD_SWITCH_LUA) - stl_ListIterator = st_PluginConfig.pStl_ListPluginLua->begin(); - for (int i = 1; stl_ListIterator != st_PluginConfig.pStl_ListPluginLua->end(); stl_ListIterator++, i++) + int nLuaCount = 0; + XCHAR tszFileExt[64] = {}; + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLuaPlugin, &pptszListFile, &nLuaCount, false, 1); + for (int i = 0; i < nLuaCount; i++) { - if (stl_ListIterator->bEnable) + BaseLib_String_GetFileAndPath(pptszListFile[i], NULL, NULL, NULL, tszFileExt); + if (0 == _tcsxnicmp(tszFileExt, _X("lua"), 3)) { - if (ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, 1)) + if (ModulePlugin_Loader_Insert(pptszListFile[i], 1)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,路径:%s"), i, pptszListFile[i]); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载失败,方法:%s,路径:%s,错误:%lX"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, ModulePlugin_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载失败,路径:%s,错误:%lX"), i, pptszListFile[i], ModulePlugin_GetLastError()); } } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } } #else XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,加载Lua模块插件失败,因为LUA编译被关闭")); #endif //展示能力 - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载的Lib插件:%d 个,Lua插件:%d 个"), st_PluginConfig.pStl_ListPluginModule->size(), st_PluginConfig.pStl_ListPluginLua->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载的Lib插件:%d 个,Lua插件:%d 个"), nLibCount, nLuaCount); } else { diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Reload.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Reload.cpp index 00adadc..dc3703c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Reload.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskGet/TaskGet_Reload.cpp @@ -21,68 +21,31 @@ bool HTTPTask_TaskGet_Reload(LPCXSTR lpszClientAddr, LPCXSTR lpszOPCode) } else if (1 == _ttxoi(lpszOPCode)) { + int nLuaCount = 0; + int nLibCount = 0; + XCHAR** pptszListFile; ModulePlugin_Loader_Destory(); - delete st_PluginConfig.pStl_ListPluginLua; - delete st_PluginConfig.pStl_ListPluginModule; - st_PluginConfig.pStl_ListPluginLua = NULL; - st_PluginConfig.pStl_ListPluginModule = NULL; - ModulePlugin_Loader_Init(); - if (!ModuleConfigure_Json_PluginFile(st_ServiceConfig.st_XPlugin.tszPlugin, &st_PluginConfig)) - { - st_HDRParam.nHttpCode = 500; - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); - XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求操作配置重载失败,加载Lib插件配置失败,错误:%lX"), lpszClientAddr, ModuleConfigure_GetLastError()); - return false; - } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求操作配置重载成功,加载插件配置成功"), lpszClientAddr); - { - list::const_iterator stl_ListIterator = st_PluginConfig.pStl_ListPluginModule->begin(); - for (int i = 1; stl_ListIterator != st_PluginConfig.pStl_ListPluginModule->end(); stl_ListIterator++, i++) + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLibPlugin, &pptszListFile, &nLibCount, false, 1); + for (int i = 0; i < nLibCount; i++) { - if (stl_ListIterator->bEnable) - { - if (ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, 0)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,重载Lib模块插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,重载Lib模块插件中,当前第:%d 个加载失败,方法:%s,路径:%s,错误:%lX"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, ModulePlugin_GetLastError()); - } - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,重载Lib模块插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } + //加载插件 + ModulePlugin_Loader_Insert(pptszListFile[i], 0); } + BaseLib_Memory_Free((XPPPMEM)&pptszListFile, nLibCount); } { - list::const_iterator stl_ListIterator = st_PluginConfig.pStl_ListPluginLua->begin(); - for (int i = 1; stl_ListIterator != st_PluginConfig.pStl_ListPluginLua->end(); stl_ListIterator++, i++) + SystemApi_File_EnumFileA(st_ServiceConfig.st_XPlugin.tszLuaPlugin, &pptszListFile, &nLuaCount, false, 1); + for (int i = 0; i < nLuaCount; i++) { - if (stl_ListIterator->bEnable) - { - if (ModulePlugin_Loader_Insert(stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, 1)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,重载Lua模块插件中,当前第:%d 个加载成功,方法:%s,路径:%s"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,重载Lua模块插件中,当前第:%d 个加载失败,方法:%s,路径:%s,错误:%lX"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile, ModulePlugin_GetLastError()); - } - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,重载Lua模块插件中,当前第:%d 个加载失败,因为没有启用,方法:%s,路径:%s"), lpszClientAddr, i, stl_ListIterator->tszPluginMethod, stl_ListIterator->tszPluginFile); - } + ModulePlugin_Loader_Insert(pptszListFile[i], 1); } } HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求重载插件成功,Lib插件:%d 个,Lua插件:%d 个"), lpszClientAddr, st_PluginConfig.pStl_ListPluginModule->size(), st_PluginConfig.pStl_ListPluginLua->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求重载插件成功,Lib插件:%d 个,Lua插件:%d 个"), lpszClientAddr, nLibCount, nLuaCount); } else if (2 == _ttxoi(lpszOPCode)) { -- Gitee From 416481b73120d10fd324b651f9adc4967058214f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 5 Jun 2025 15:08:31 +0800 Subject: [PATCH 18/22] fixed:module info get failure --- .../Plugin_BMIndex/Plugin_BMIndex.cpp | 8 ++++---- .../XEngine_PluginModule/ModulePlugin_BMIndex/pch.h | 1 + .../ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp | 8 ++++---- .../XEngine_PluginModule/ModulePlugin_Meter/pch.h | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp index 611038f..8c6d80c 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/Plugin_BMIndex/Plugin_BMIndex.cpp @@ -83,10 +83,10 @@ void CPlugin_BMIndex::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPlugi { BMIndex_IsErrorOccur = false; - ptszPluginName = (XCHAR*)"bmindex"; - ptszPluginVersion = (XCHAR*)"1.0.0.1001"; - ptszPluginAuthor = (XCHAR*)"xengine"; - ptszPluginDesc = (XCHAR*)""; + _tcsxcpy(ptszPluginName, "bmindex"); + _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); + _tcsxcpy(ptszPluginAuthor, "xengine"); + _tcsxcpy(ptszPluginDesc, "null"); } /******************************************************************** 函数名称:PluginCore_Call diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.h index cde822e..129ea9d 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_BMIndex/pch.h @@ -9,6 +9,7 @@ #ifdef _MSC_BUILD // 添加要在此处预编译的标头 +#define _CRT_SECURE_NO_WARNINGS #include "framework.h" #include #endif // _MSC_BUILD diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp index e7025c9..0e2daac 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/Plugin_Meter/Plugin_Meter.cpp @@ -83,10 +83,10 @@ void CPlugin_Meter::PluginCore_GetInfo(XCHAR* ptszPluginName, XCHAR* ptszPluginV { Meter_IsErrorOccur = false; - ptszPluginName = (XCHAR *)"meter"; - ptszPluginVersion = (XCHAR*)"1.0.0.1001"; - ptszPluginAuthor = (XCHAR*)"xengine"; - ptszPluginDesc = (XCHAR*)""; + _tcsxcpy(ptszPluginName, "meter"); + _tcsxcpy(ptszPluginVersion, "1.0.0.1001"); + _tcsxcpy(ptszPluginAuthor, "xengine"); + _tcsxcpy(ptszPluginDesc, "null"); } /******************************************************************** 函数名称:PluginCore_Call diff --git a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.h b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.h index a246de0..e797d0f 100644 --- a/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.h +++ b/XEngine_Source/XEngine_PluginModule/ModulePlugin_Meter/pch.h @@ -9,6 +9,7 @@ #ifdef _MSC_BUILD // 添加要在此处预编译的标头 +#define _CRT_SECURE_NO_WARNINGS #include "framework.h" #include #endif // _MSC_BUILD @@ -38,7 +39,6 @@ extern bool Meter_IsErrorOccur; extern XLONG Meter_dwErrorCode; - #ifdef _MSC_BUILD #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") #ifdef _DEBUG -- Gitee From 4cc223471b7cf897e53febde0925dfae36e66675 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 5 Jun 2025 15:09:00 +0800 Subject: [PATCH 19/22] modify:print info plugin module when load completed --- .../ModulePlugin_Define.h | 68 +++++++++++++++++ .../ModulePlugin_LibCore.cpp | 4 +- .../ModulePlugin_Loader.cpp | 73 +++++++++++++++++++ .../ModulePlugin_Loader/ModulePlugin_Loader.h | 1 + .../XEngine_ModulePlugin.def | 2 + XEngine_Source/XEngine_ModulePlugin/pch.cpp | 8 ++ .../XEngine_HttpApp/XEngine_HttpApp.cpp | 12 ++- 7 files changed, 163 insertions(+), 5 deletions(-) diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h index 938e761..0ecb987 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Define.h @@ -321,6 +321,74 @@ extern "C" bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType = 0 *********************************************************************/ extern "C" bool ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* pInt_Type); /******************************************************************** +函数名称:ModulePlugin_LibCore_Get +函数功能:获取插件基础信息函数 + 参数.一:lpszMethodName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的模块句柄 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR* ptszPluginName = NULL, XCHAR* ptszPluginVersion = NULL, XCHAR* ptszPluginAuthor = NULL, XCHAR* ptszPluginDesc = NULL); +/******************************************************************** +函数名称:ModulePlugin_Loader_GetForModule +函数功能:通过模块名称获取模块信息 + 参数.一:lpszModuleName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的模块名称 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ModulePlugin_Loader_GetForModule(LPCXSTR lpszModuleName, XCHAR* ptszPluginName = NULL, XCHAR* ptszPluginVersion = NULL, XCHAR* ptszPluginAuthor = NULL, XCHAR* ptszPluginDesc = NULL); +/******************************************************************** 函数名称:ModulePlugin_Loader_Exec 函数功能:执行一次插件 参数.一:lpszMethodName diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp index 82086cc..1f6be2d 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_LibCore/ModulePlugin_LibCore.cpp @@ -276,9 +276,7 @@ bool CModulePlugin_LibCore::ModulePlugin_LibCore_Add(XNETHANDLE xhNet, LPCXSTR l ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_PARAMENT; return false; } - PLUGINCORE_FRAMEWORK st_FrameWork; - st_FrameWork.mhFile = 0; - memset(st_FrameWork.tszModuleFile, '\0', sizeof(st_FrameWork.tszModuleFile)); + PLUGINCORE_FRAMEWORK st_FrameWork = {}; //打开一个模块 #ifdef _MSC_BUILD st_FrameWork.mhFile = LoadLibraryA(lpszPluginFile); diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp index 3aac58c..83156d7 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.cpp @@ -207,6 +207,79 @@ bool CModulePlugin_Loader::ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR return true; } /******************************************************************** +函数名称:ModulePlugin_Loader_GetForModule +函数功能:通过模块名称获取模块信息 + 参数.一:lpszModuleName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的模块名称 + 参数.二:ptszPluginName + In/Out:Out + 类型:字符指针 + 可空:N + 意思:处理名称 + 参数.三:ptszPluginVersion + In/Out:Out + 类型:字符指针 + 可空:N + 意思:版本号.使用x.x.x.x 格式 + 参数.四:ptszPluginAuthor + In/Out:Out + 类型:字符指针 + 可空:N + 意思:作者 + 参数.五:ptszPluginDesc + In/Out:Out + 类型:字符指针 + 可空:N + 意思:插件描述 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CModulePlugin_Loader::ModulePlugin_Loader_GetForModule(LPCXSTR lpszModuleName, XCHAR* ptszPluginName /* = NULL */, XCHAR* ptszPluginVersion /* = NULL */, XCHAR* ptszPluginAuthor /* = NULL */, XCHAR* ptszPluginDesc /* = NULL */) +{ + ModulePlugin_IsErrorOccur = false; + + bool bFound = false; + st_Locker.lock_shared(); + for (auto stl_MapIterator = stl_MapLoader.begin(); stl_MapIterator != stl_MapLoader.end(); stl_MapIterator++) + { + if (0 == _tcsxnicmp(lpszModuleName, stl_MapIterator->second.tszModuleFile, _tcsxlen(stl_MapIterator->second.tszModuleFile))) + { + if (NULL != ptszPluginName) + { + _tcsxcpy(ptszPluginName, stl_MapIterator->second.tszModuleName); + } + if (NULL != ptszPluginVersion) + { + _tcsxcpy(ptszPluginVersion, stl_MapIterator->second.tszModuleVer); + } + if (NULL != ptszPluginAuthor) + { + _tcsxcpy(ptszPluginAuthor, stl_MapIterator->second.tszModuleAuthor); + } + if (NULL != ptszPluginDesc) + { + _tcsxcpy(ptszPluginDesc, stl_MapIterator->second.tszModuleDesc); + } + bFound = true; + break; + } + } + st_Locker.unlock_shared(); + + if (!bFound) + { + ModulePlugin_IsErrorOccur = true; + ModulePlugin_dwErrorCode = ERROR_XENGINE_APISERVICE_MODULE_PLUGIN_NOTFOUND; + return false; + } + return true; +} +/******************************************************************** 函数名称:ModulePlugin_Loader_Exec 函数功能:执行一次插件 参数.一:lpszMethodName diff --git a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h index ad1bc91..6362314 100644 --- a/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h +++ b/XEngine_Source/XEngine_ModulePlugin/ModulePlugin_Loader/ModulePlugin_Loader.h @@ -32,6 +32,7 @@ public: bool ModulePlugin_Loader_Insert(LPCXSTR lpszModuleName, int nType = 0); bool ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* pInt_Type); bool ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR* ptszPluginName = NULL, XCHAR* ptszPluginVersion = NULL, XCHAR* ptszPluginAuthor = NULL, XCHAR* ptszPluginDesc = NULL); + bool ModulePlugin_Loader_GetForModule(LPCXSTR lpszModuleName, XCHAR* ptszPluginName = NULL, XCHAR* ptszPluginVersion = NULL, XCHAR* ptszPluginAuthor = NULL, XCHAR* ptszPluginDesc = NULL); bool ModulePlugin_Loader_Exec(LPCXSTR lpszMethodName, XCHAR*** pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR* ptszMsgBuffer, int* pInt_MsgLen); bool ModulePlugin_Loader_Destory(); protected: diff --git a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def index e0fc173..8ebbc95 100644 --- a/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def +++ b/XEngine_Source/XEngine_ModulePlugin/XEngine_ModulePlugin.def @@ -18,5 +18,7 @@ EXPORTS ModulePlugin_Loader_Init ModulePlugin_Loader_Insert ModulePlugin_Loader_Find + ModulePlugin_Loader_Get + ModulePlugin_Loader_GetForModule ModulePlugin_Loader_Exec ModulePlugin_Loader_Destory \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModulePlugin/pch.cpp b/XEngine_Source/XEngine_ModulePlugin/pch.cpp index 336b657..e82310a 100644 --- a/XEngine_Source/XEngine_ModulePlugin/pch.cpp +++ b/XEngine_Source/XEngine_ModulePlugin/pch.cpp @@ -91,6 +91,14 @@ extern "C" bool ModulePlugin_Loader_Find(LPCXSTR lpszMethodName, int* pInt_Type) { return m_PluginLoader.ModulePlugin_Loader_Find(lpszMethodName, pInt_Type); } +extern "C" bool ModulePlugin_Loader_Get(LPCXSTR lpszMethodName, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginLoader.ModulePlugin_Loader_Get(lpszMethodName, ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} +extern "C" bool ModulePlugin_Loader_GetForModule(LPCXSTR lpszModuleName, XCHAR* ptszPluginName, XCHAR* ptszPluginVersion, XCHAR* ptszPluginAuthor, XCHAR* ptszPluginDesc) +{ + return m_PluginLoader.ModulePlugin_Loader_GetForModule(lpszModuleName, ptszPluginName, ptszPluginVersion, ptszPluginAuthor, ptszPluginDesc); +} extern "C" bool ModulePlugin_Loader_Exec(LPCXSTR lpszMethodName, XCHAR * **pppHDRList, int nListCount, int* pInt_HTTPCode, XCHAR * ptszMsgBuffer, int* pInt_MsgLen) { return m_PluginLoader.ModulePlugin_Loader_Exec(lpszMethodName, pppHDRList, nListCount, pInt_HTTPCode, ptszMsgBuffer, pInt_MsgLen); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index 762ba19..2fb4905 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -420,7 +420,11 @@ int main(int argc, char** argv) //加载插件 if (ModulePlugin_Loader_Insert(pptszListFile[i], 0)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,路径:%s"), i, pptszListFile[i]); + XCHAR tszModuleName[128] = {}; + XCHAR tszModuleAuthor[64] = {}; + XCHAR tszModuleVer[64] = {}; + ModulePlugin_Loader_GetForModule(pptszListFile[i], tszModuleName, tszModuleVer, tszModuleAuthor); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lib模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), i, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); } else { @@ -441,7 +445,11 @@ int main(int argc, char** argv) { if (ModulePlugin_Loader_Insert(pptszListFile[i], 1)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,路径:%s"), i, pptszListFile[i]); + XCHAR tszModuleName[128] = {}; + XCHAR tszModuleAuthor[64] = {}; + XCHAR tszModuleVer[64] = {}; + ModulePlugin_Loader_GetForModule(pptszListFile[i], tszModuleName, tszModuleVer, tszModuleAuthor); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,加载Lua模块插件中,当前第:%d 个加载成功,路径:%s,方法名:%s,作者:%s,版本:V%s"), i, pptszListFile[i], tszModuleName, tszModuleAuthor, tszModuleVer); } else { -- Gitee From 4d1af4f9f5ca40d35b2c7d6fa4bd8cc390c0483e Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 6 Jun 2025 10:21:05 +0800 Subject: [PATCH 20/22] fixed:not load dylib plugin --- .../XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp index 2fb4905..765c3c9 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_HttpApp.cpp @@ -415,7 +415,7 @@ int main(int argc, char** argv) { XCHAR tszFileExt[64] = {}; BaseLib_String_GetFileAndPath(pptszListFile[i], NULL, NULL, NULL, tszFileExt); - if (0 == _tcsxnicmp(tszFileExt, _X("dll"), 3) || 0 == _tcsxnicmp(tszFileExt, _X("so"), 2)) + if (0 == _tcsxnicmp(tszFileExt, _X("dll"), 3) || 0 == _tcsxnicmp(tszFileExt, _X("so"), 2) || 0 == _tcsxnicmp(tszFileExt, _X("dylib"), 5)) { //加载插件 if (ModulePlugin_Loader_Insert(pptszListFile[i], 0)) -- Gitee From db3c10bf86d74516c0fe330048a1c329c3eb8b4e Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 6 Jun 2025 11:04:21 +0800 Subject: [PATCH 21/22] modify:init parameter and used now for plugin module --- CHANGELOG | 16 ++++++++ README.en.md | 1 + README.md | 1 + XEngine_Docment/Docment_en.docx | Bin 155112 -> 159879 bytes XEngine_Docment/Docment_zh.docx | Bin 168238 -> 169020 bytes .../ModulePlugin_Calculation.lua | 4 +- .../XEngine_LuaPlugin/ModulePlugin_Heart.lua | 4 +- .../XEngine_LuaPlugin/ModulePlugin_OSTime.lua | 4 +- .../ModulePlugin_Define.h | 29 +++++++++------ .../ModulePlugin_LibCore.cpp | 24 ++++++------ .../ModulePlugin_LibCore.h | 8 ++-- .../ModulePlugin_Loader.cpp | 13 +++++-- .../ModulePlugin_Loader/ModulePlugin_Loader.h | 2 +- .../ModulePlugin_LuaCore.cpp | 35 +++++++++++------- .../ModulePlugin_LuaCore.h | 4 +- XEngine_Source/XEngine_ModulePlugin/pch.cpp | 12 +++--- XEngine_Source/XEngine_ModulePlugin/pch.h | 2 + .../ModulePlugin_BMIndex/BMIndex_Define.h | 10 ++--- .../Plugin_BMIndex/Plugin_BMIndex.cpp | 11 +++--- .../Plugin_BMIndex/Plugin_BMIndex.h | 2 +- .../ModulePlugin_BMIndex/pch.cpp | 4 +- .../ModulePlugin_BMIndex/pch.h | 2 + .../ModulePlugin_Meter/PluginMeter_Define.h | 2 +- .../Plugin_Meter/Plugin_Meter.cpp | 10 ++--- .../Plugin_Meter/Plugin_Meter.h | 2 +- .../ModulePlugin_Meter/pch.cpp | 4 +- .../ModulePlugin_Meter/pch.h | 2 + .../ModulePlugin_Password/PluginPass_Define.h | 10 ++--- .../Plugin_Password/Plugin_Password.cpp | 10 ++--- .../Plugin_Password/Plugin_Password.h | 2 +- .../ModulePlugin_Password/pch.cpp | 4 +- .../ModulePlugin_Password/pch.h | 2 + .../Plugin_Timezone/Plugin_Timezone.cpp | 10 ++--- .../Plugin_Timezone/Plugin_Timezone.h | 2 +- .../ModulePlugin_Timezone/Timezone_Define.h | 10 ++--- .../ModulePlugin_Timezone/pch.cpp | 4 +- .../ModulePlugin_Timezone/pch.h | 2 + .../ModulePlugin_Zodiac/PluginZodiac_Define.h | 10 ++--- .../Plugin_Zodiac/Plugin_Zodiac.cpp | 10 ++--- .../Plugin_Zodiac/Plugin_Zodiac.h | 2 +- .../ModulePlugin_Zodiac/pch.cpp | 4 +- .../ModulePlugin_Zodiac/pch.h | 2 + .../XEngine_HttpApp/XEngine_HttpApp.cpp | 10 +++-- XEngine_Source/XEngine_UserProtocol.h | 15 +++----- 44 files changed, 185 insertions(+), 132 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 23c6123..890f87f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,19 @@ +XEngine_APIService V3.11.0.1001 + +增加:更多发布系统支持 +更新:依赖库 +优化:编译脚本 +修改:插件支持获取更多信息了 +修改:删除了插件配置,不在需要 +修复:配置文件内存溢出问题 + +ci:added debian and fedora system support +update:depend library +improved:make file build flags +modify:get more info support for plugin module +modify:delete plugin configure and plugin auto load support +fixed:memory leak for configure parse +====================================================================================== XEngine_APIService V3.10.0.1001 增加:windows服务支持 diff --git a/README.en.md b/README.en.md index 7bacf8f..f42ef00 100644 --- a/README.en.md +++ b/README.en.md @@ -79,6 +79,7 @@ In order to save resources, now the IP and phone and mac databases need to be co #### Database Env MYSQL database version 8.0 or above is required. Create a table through CreateDatabase.sql, and then import other sql table Modify the database configuration in XSQL in the configuration file to your +The default configuration does not enable database support. If the database interface is required, you need to enable the database yourself #### Windows need to vcpkg configure third-part env.refer vcpkg install guide.after installed and execution:vcpkg.exe install lua:x86-windows opencv[contrib]:x86-windows libqrencode:x86-windows lua:x64-windows opencv[contrib]:x64-windows libqrencode:x64-windows diff --git a/README.md b/README.md index 8016713..3a62321 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ macos执行:./XEngine_LINEnv.sh -i 3 #### 数据库环境 需要MYSQL数据库8.0以上版本.通过CreateDatabase.sql创建表,然后导入剩余的表 修改配置文件里面XSQL里面的数据库配置为你的 +默认配置没有开启数据库支持,如果需要数据库接口支持,需要自己开启数据库 #### sub module 由于依赖的子模块,在你checkout仓库后,在仓库目录下执行下面的命令拉取子模块 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index aae412cf4375fdbbd0db958338364e478802e9d8..2c9fcb7b8c0e83b7c5b9e8108624e4682dc36018 100644 GIT binary patch delta 142326 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 delta 137499 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 Ic{j`d065Jy*Z=?k diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 2d744698d0e23f07bd450727e69bf366dce241fe..bc77d6166a23945c0dcc604d20063629970723fa 100644 GIT binary patch delta 133941 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 delta 133247 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 z%0DLh-hgacMB_0;!ryz=N~k%(?Z%Tr(|-xBKd|}KfS?ChAw2M9Q8P9b1E99LEr$#& ztC~}0#d1g+Sbty-d@rU0h_X?LU|#F67wg_(sYpl3I9#10V11#62~RD$pr1U`KP1?WLIFOJTR?r<%m6okW>qTcW#bKLVXR)K_7E z3JWNq=F&ALTTU~-xK9|zMQGQajdA(3*&mO~qgzwq z^Tu?*G0alkS+R6!hh}TAdjN&aj3=TPE0wndBhEBoS@DW_c`x3(p?$qtFZaQ>!++I& zQ^g0*(azQG50?Rj0u`62kOC011IaBIe}J!sRm_6{08YOL01*HH0C#V4WG{1NbaZKM zXLBxiZEUoiS(9MJb?4tFV!i{xyG-s2VeH78i!5769)s){y_LEPQC4?VM|HIj`tDPJ?&1EkkL}-?k3YJ-fA;YFfA0SG zpMCtBFW1k?#~;0Zy19RT^Wx$D_Op+_y?y=hKmNo2{$GFp&8M$#pPuw*uRqc&?q7fU z^4Vt}fBp3I>eEj?dHw9`+m|=5|L)<{?Y+RS9v)xbJn4TQfB(tLo5w%AdG)hr4=-Qc zJl*~7?#12Hx1Ts;(#P*#^YGcne{UY|KYjm-pS`?$_W1Dn;j5?p$fplqeRcQj_Wgf8 zJn{I~eD~cW7-E- zo8P_Aa75Z4i8?=eJG%XEZSwxl+aGWL^!E3AZQuX!)r)BA^i zeRKcp>CIcY^)I)N_xhu^z_YJ!9&euMgYTd05BE=x4=+BvV9VP_iG%Mw{qBWdX_WUG z=)XRG|Nr#Z=Bc0AfB*VN?|=Pv*q{9H+1vZ)Kl+~^yyw6E_QPxb%Y*L}!~W^DCUUzT z9)I)8cT0Tp;^zL@?H8Kci`(nlCrRHozkB!7f80HP`ug2U?hW|m?ad!=ubXFoc>O{Q z(6-)s3%+^r<>SrW+ogT?i?@G0|MW`Q?TfGPzIyt%+b7B5f49)h^Z$JF`stT<_qYFa zd-waVpMG)w<)*H8?|FT@<}Yu)eR%WqZt33+`HOejP;VpFcd8y3(VM zcYi&<><8ZO{=4Pl4?ReGi*jz?4)BYoZ(nH9?w`K6`}1wPfBw&!#hu>xZpZ)UBlzzI zaC^VM{A)4nf0y6Bx?Q(7T18n2f18iJ-Lv)L?$zgaVzb9z+&>qi{>?si_tjUokNUvf z&C~7Y;^4c-hi~4l^E=-ETYXm)_8T9j_|A(FYH0ZHkERC9QnwRth(XYGtcAKU>6=76M}4mr1R>ykmJQjH1UI}fAd4cx&v=VI}S6AF|@-oDGnY%GPUyR zB)j}z#Cy+Nk|ZfABH7f%W6S0`%qN?EkcnB0$~2m7m^`-ZwL^@Ans`rhs)gygNQm&L zi}izPwD@}1pAzeV5=$r|KuR%4{9uQj-?{`}mH9i(uKC`+ zfBPYloI5-t<;ZK@avHpIEsw^?W#VKhcKIu@RKCJIXw55@a`;ZH_VBi38uMJYqJ$H2 zpto+DVY(JFd2Btl%6r;VyLeA~j)8fh=jNGDdtL|58j@o?f?-Esx*mQV^!9WT%qL{< z>P#saUhC;b;t|X^GS6p>akAql(^L8@yvlVMDx_c5Fx&TaY&7z*e-792tqC1YXhTf6QU6 zql`b&0mA5w}o<`>y|3}7`Ek5_?at- zO%UlKV4hER7h3_gC(nA@_S`Ffe`okS_&dW__CD;0u`(S@O^KhG5>>pX)6~GLBW-4R zrqkC0jm}^f&vb^F56{FISz0a|I!mPG?16fv0WEX=O6xGTl`BUU_8CY-xg$wsFWhZs zk{tU3GT2&oCKtAqoi%MBZ#(Nd`#;Xc#uk@z;_d^IJ9DG+rZB}jsgl4mfAt}AWWfb@ zIbP8auF5MKa&f#mGHMR%7ENc%&P7Q}qyv}IU?0Qf?NlC+dLi|??Bs$m;yr6xmqRQE zBrcW|E}!(AEB4?`xe|Ouc_3uw1Cr~366H5GUV|ztme-)BE1(o}HK)dF-ApUIbJ8WA zSEsp)rHgCPv-B4-`r(-*f6_+evi30QOO_RL*5wz+>@?-$a~tw zT0DXtCfgKF?>dZagb;WHBVHU`aU;9I^O>8rPe|esOfwJsGkteFpP9yC)XRj-tFuh> z{I+FNVrjWVqlfSKgZJT9zSzR|#uSd#czI0&<$;jM8beN2pSafEf68m(w^hv~shm`20&e%fnPCh#Bw$zVh+VL)h!!zDa_FUg0JX4?A#Ql-e7CGwSgS0c!f&Al~ zcmz?lDzAa4?J(--3(GejS0@F_(#5AFhGax;4zG?hEpwxn zKILehFY+k)J0)M8f5%qsA%-u+adcA1JWzZSVe{%VXFJcQNs#jhn(TwacS5Sn^({6& zf$}XKyeZ#uoxD1iFKpHLD@1!j66<<@#dbit>ugu~9_nEiHp27iGM|{LhFnx$(IF+n zYcO`ah!J=2v;6Q^WG}o)Mq5`6X^-e|lST`Ek@iUJiRxVf)p% z20=DH$3uh^gKH2>@Ei>n(s)IKSbHLu2w7~q1nI1Ncv~oiM_}V*NfB%|e4-YdTOIc_ zINv#j5?q*kma|m}Q+#kK2HpjiYUOAAjyW^pI$Ns22gCM(kV8yWNM_CwQXQ|g4|DOl zNdYnc1Sy~oe|ca(L~>=$5_0eXg9w|W?m^qlS~F<79gi)VT6w0?430f*Dat2m5@Ca* zDPw=W_f!bmeBrX4V-Dd8h0lzF{BS<;4BZyCqC=04eLx|dPcK8yh2s=L)&Y?fF!^mG z8uki=Og@(hLmuVfJGon)>B#e-vu2D3**jzA45A&w;ZxGE?BWcFuw3GEjIbmx56>KT zd&SB=e|lJ=c(gX6v6(Y1gmk9SXq@4=STtEfK*WmP_!(;(dlJ!xYw-wdZ0tKnIR&gw zqsmF7`{JH{;?F$Q5V5B>EVcb~bYHp87aBh7#q_9iEW^ z$LD}Cgp0XEF0JJlv5><_ifoOG?KjPHa>hW6f61_fjWLId*E-qBr@rFfLzcnj?8R@B z>&&`Q$YgGeSzbD?LH3m`VofJ-#4Kj{bG+6$b=DZMn8Y$($YdWQ7Tej^j72^ezfF4k zz;o3!K68!wJ!{(7yjiF*g(-M%ho0|{9i0gTeLY@x)Juddm;&8Px2M;$6^O29vxkYhG0r9%c zEfx<*XRkm?+j3S*oY5Yn^0I@i^|(^xHAu!R)@HJXSV2!XvQW zvll9)vz|*fM27219S0-?bOGso3ek=W2Bx7srHBjfad5A)WInnh`0p!`r0i4sSbUfoMG)pRA_o4plyB`phQ}X$HsksF1+cQ<`zHb(?0geBPL5 zKIDg_9ot}TT;h6uX4%A<^JxXcUXGB#k%hG6PB9&<+&FeCN3U^?Og64Ce_dx25=*fx zZ-(Pyc^AJR2WJ}^M~kxTD)yPOm5suq7Q)fvY_&RvXYwJ>A@8UMKjZe&G2$=wD6*OenY9*(TSb1wJ7Z(l|;jeK9y5pRd>)kDyzBLVR>ge>>f0K3Nq~I`2=9 zt}<^+mvLlH$T-Ll*%W+kCggA`l1I8YN|2|I92d(oH`a}LnQ*a|Sw3+!US7d=rt1|l zdu@5e#@%4G2LKdHrmbd5F2PAXswwQRxv?wN7j(QZ0naU@vCf5HDLP6GSzwmg`F%T7b&QF|>M(rEFgY^~y*VGBiwWv&I>3>oFT+wy}CqaOZ{ zJtO2$k6y;kPYHKFqfR5kGsQ{8O| zm=f!@YmgG_F5JaE6;jytuhu!{xoYF$T%5Ya8-K^y!}+#E)nt38I&ZnYUPxgnCgfsy zUB#yB@U~z%YeLAy{8L@5Tsv01>{0%XY-r}-Dox88e|;lt`&S<>_5p=-&Kj>ihr#oa z-sbbH8dB%;1u2Ze*+4>0YY@Z1Z>%v|_5o|m<}lObFRnYRNu0%FlYPSZA$5l%m>05N zoCQ+l*izN)7a*dXUnbyTiN0g(%I${a>$ix!5#WWNK_f-k`|3;J5k7?0=7kWkVrxb$0=IO zf1dMUg%tL;g&e%YmhFK{T6UcyGA+wHMC~l0e5l-N(x+T4*@~YWKWHT!Dv(-9jl18p zk`14v2$`H;)nwjs9)7F7uuakAWgV!h#&KAKnhyOBTC;`aTWc<|ZfwnWwgOrUo^wuH zONUI0cF7s%nO-uyc|O-}63&S4Y{$1Ne>9Gvv@1@|LuuEk2T|+MA9k+G5aQkL={l^= zu#NRx8!oa}E#zSHX{!y#mD|V{*W?Qsoaf!7%{XS)R;ULWUCCsmookn)<9CE4p3k+7 zuER6FupGTiG#n|}2>Y5s4w-(JhQ^+Rki{|YYoAx}sI57iYl`3<`;EK(0mp>Ie+r5H z?aSGI7@JFtqm!503CoB`_VWq*w~Xd^nesEByiuNYYPhGdLfJRDX!i0k!Ko{<#?}q;qc*DWEP&(W`x9rxP1vN>d^e+Y?({mCwKlt9R#6XBIZ=J>&t)1fomRa|3#;gVO) zme5tgp?k+w(me2K^{4%*!Eg-asvt*6|KHt@>%RHZU>aHSWah>ZWD}*f} zA)T{lt`-xYn+d6G*cUGl0q5Ay2i&_!8DIq*-({;SJBI%J#=m8F6&zdBymM=_wLY5p?iPm<<@;X zt$|O5IjhSp;e5*;V&d$K9?~Ix-KFbU_R1+3oWa_o%qrf~7#CBO%ty~B0z%T^nG`(7 zUF2+6)~8)|H^&cpwuc^TJ@1Bg2W0xgGs$vnz2{t6BK2Yy%eP+Qe|Hzv{0NDhThxoJ z0H(K+8~Y2rTE}r0A%`xOLe@bZRNweSy4P^%Fw<)~NU`3`ArGZD?>RfYw@|oWT5oBx zrP^Db+?Sxsnc=Rs{n{Nj4oKwgxk57A{=J*QXCFc)_kidUV;p-DlDHP3_gxduND6F0 z3b_uuAO<=}m!1zDf2X?k`oMD|HI5$$Icbb3r0GB*wv4<}GVf6{xNepif z-KU3li?!zPJKG(Ru-j2Fa?0!(K~BNpnRK{yWkj1;H;x!GSKo{n=V5Fq6y`Z0gR`GU zO6xG{ls(7a#y0GDPjkH3+Z{O{vIB)2`r(ga9M^q}VjV|yh13Hj7ID_$nP54)R>35(c{Q_!$zJHJ z>2Qz0Y&LV>mD$|k+)PM3@LcnStIma-WJn8vb)%5RmfdW*9cc72i6iwwEbcEZp3g{*bB{&ThGWrl8N<1TLfk=@ESoupX)fQmH|kuWvaZ(vB1^Gl zd}5DfnQ*wrbD3zkBiORm@cH(#-ZTF!n+~Ua%h}0!oy+;m8ePa>Il5d}ER{FHCtV_H zf5#edX*!%cDI{`coRGxb6ojv$l=DG)xAIHlI{!JZ$j!}=X$K1CnA!^?dP}#2V(1Nw$UyoChhSaIO3r;X3f#2%RHYYsA9QFCmqCbO<@rimZ_W$As22 zhdTZ>ZRWF_B_Ey74%ZBaoNXZoe__p(I8L#oggFK&Bpp^~xxqH9)KcIW`-jpLd~8-=kv5Ym}{qBj{U zyM+XUF%%njh6?UN43Vo$e{GDmvxJp%%6E{;*g<$-0lP4k zW>eVLWg-%j!RVJwJvfZJ2#JkHorWK1aoIFO#dwHKOG87+msXrufh3lf%a2^YyKZ5p zNFk9sb=e$3Mw`NB?J09(&Y8P+*j(jo;x6Q!Kgwg<_BF0smi2_ae+=wCxWo9hEjIEA zt}SjS$TK1{5jl8wO2OFrTLe8ysjS3z@Yzxg-yOA!-YdquZD}rJJkgd@{^(l-z4wjq z*{%#EH(4qd*;SZjZR_r0jQdk%RWL79`KQ=FQAp$(fqn2^Fn(a`G8}snBHI#WZCWBTSFMkI+9xQ+~Leln<}1O+I@P7_g=n5*xH!#KCtH7PN`tl7%~DfM%k>~pMbe+ zc9z|^fsqu^3$?Sm#k;+>;f>!}FhwJ$JNfoS$Z4WX}2B=>e(NuUs%A*98;# zE=Cu2t0Npi*rbCy7m}G+{VBv3=Ejg>!K`r?WC>w?iQD&qG3^A|sVozBRU7)JZhOc~ zRdLt$k>dw?2_ALiip;LB~sdM zBg&AJV#V$^E)~C6o26aHk5napo6kbs?p)3z$UB!BpUKt+j8g~+2Jhf=`wm(>cXm0) ziP0jLYqDrX%Vjfs^Rvs{b2Xl9#E{Y2aJ%;=MnOdcGJgbcPsQZ^b3LGteQzEj)m>;syV^b9*Cs@k5F+yQ22*0& zr{%am^7IPxoREoDw2;i*NL(x4V`iHNq<_+p-mcw{5;^PIz3GsHujD6YX1iSpjj>L7MYdqpk-M5V%-h!$xR%sylMmyt zPQK>CsJoDy@SMr@U=rIdJ?-)}M6wJ*3yTsLeOcv|j8 zG}i&iiL-^>XvyR0r5oaG%wgKsgk`MLbMk2$R(}e*xtrc2RZVLn=Aa7+0qYyx^l`Fn zIVBS@Cgf)H9_xQ(M9T-mwVo~VZG&zO$9cEgy!M#M>{gL=i@d#R;_40|d12Jh?VJUS zy1UhFV*71%zc9y4%ws%zdTZCHA^*s$ZYV8xDB{9g{+t}vt#A;R{*`uWJA-j$dKp&>fn1kWN3JJR)`RF3|N77^t=W{~hV0sh7 z4a}MlB0m(z7K`OhtGm;Y!H&DqK06(U5qDu%L7z-WXa)ErI>0(gpL|Np^(pRK_ zcZZPw<+uZ?FXm9s|RlmVYiKgoWP6PIZh-J0;0U$DJ!OVX;q^khoZeloAX} ziqd7R^E2~M2PRdL3v10<>_p33NLuJG__|xmBfZrtc(kI0#0yW8WWxuJ0B#~UXr?;y zh37K9S<|uFOGxBwIw6^JBYYFrVWx#|Qk%>rP3jE0!1`A91@??M?r7w9w|`8Gu6X^r zvSrt%%mW_VvYjPTTfyPEroU`T7*F(<3kRON&Gss_MCk7zWWWVtU znsgTK_SG_XLGo7*5$~4~lKJid-;Jy>Mx6DS2Pwo~*kesd7#OMd-KWV^)#ITu$oK7h z;EMLL(>D>hoWt5>-)EZW2Y>HNV;jr2-8X`5u_2zrTwOn0OsvsI*iB{-iIH!d_oGQW zBVCWn94wS^rHt`wsTkQCs4<3C8smH$>DZmsj~N2`=t5#+e_^bBO%)?zVnn7*2faO= z;hWt2jDBLQ)6Zrcc0KX4`_4Y??1Ag}{am3jvP_6rJuM^_%oExNU4Iqx`TX*^V8qNX z8L`aUtNMfOvbt%k8`m`4TiCB9AB^@V7#kaMec0zb7>5mJJN%5umB4JEV3Of`$AYP8 zp(hc{bQvpLgh*D=T8AA2McNS(4dw|28-mAO2(}$!_(CFg$O!h@Ddmi$jyhOkqQkwQY;rH6u!Fr8$9jxxOZ3Yu#}UM09Irv#d64{_X1Fu9EJ3@l?|z8g za6Vs%!*Qpf5Vxej)sdfP(NdLS^oiG6ZmU60Pe?GRe?pQZ#hWUH1n!o({gs6pJ)~sQ z2?-wWrwyqDu77w7N!B|0ry*UIJGKdl4r?NX?6?#nBO5&72;zi}k&=+sCOAU!PVvQ2 zXKN0cDLXqb&p~_R4pfz+Gnl&)_U%8ItrfE51V+$9ai;Niic|*P;~8XB70mSz5)IZS zg`%;cy%XM+XCdtrO^7+T$SFVzKkV#u%w`Csn|c_*G=F?rA;cHfS!Kq=8ok;RC04mi ztZAzYnJv4Ta>FxzIdhgPA49zySK5Z!?S=WHLFP%qT=!5Vm3c)acnx|ILR?`xvDwJ= zr=i8&{~3|I(*Oy%BzoCCxZ>fSJ0Y=QR%N($IFFy%cb+gZ?8My3(BnQ3MkMbhc!-pp zih@YZTz^FpdXF7*spT`~g(qF1FVitnFT@tsSu!a293u=(6g@B@;le16%mbgWw_}h{ zo>)sNBvh<;3q#a~QP42M3YUfWEL zb0@>hau;yayF(LJ3Wm8d*O!ESktp-e%HCn*XMbNh=6KX=M8kIPn)2F6zQtXShgvi4 ziZhh{(d_m+wARtITrtx;N&^?nP}vCIjwHl8lt@BS$IOwqTdiUT?kGR6VegFHnR}x3 zw3|f_lob17NzRLoRuTzMMPxU)fzm%Z@hN)m(G{DJ=c063=TUnZ8)%b9d2InBr_onm zF@MV~`YT7wz>8iY7GrihCN*aU*>Rgf=zT=_a~^Z*qo~cJ6&)p(xl^%_Sn(`025C8zAws<2??f+Aif`ME<V#U-vzT-Krn+<$k~I6Om+N$*21G$u(TrX6jy#~6x`e4*Zs zJNucXW$M1*`DxTV3$ISz3Js}O4*JB{V9Z&ofTI?2kiEG$u1FLTxI1{v)m|8Bj9Qz- z@-2^K@FX&3X&H>-#A0K^xLDl&50AR|LuZ6oLS7ifk@sb|lV>c|PxQcI*%e|q(|@uX z664#pCxQM?tdcuu??m|v8SR~2`f0G&QLN22jL^o~Wv(O7)vmYU>eQ|QkOdjrZfk)Q z(*7S^=aJ<`3c!pS8=i`aYZ5MBtXV-R&B0>4KEjQLodwqsnQ;QabK8V~e zvE13u8?u5x4r{;@PFg$%=WCB|wkq~g?kLN z(^JQ4uV}_)=xG$qk4?pTXp>BYz#Mxtzpk$Nz)Y9gl%V|u3b z{LsS`VT^&*H{l^pymPtLhB`|-E!BX#kh^cRZY>ICaAuGY=PrqskAF3^h^?fLCoWp_ zSw+u+m695A86h^%6C9~*M=JBAAgvr>p@mvqB-2-Q;1iLTA6t*$YspB8^#W`05N6tP(HNjl5tCOA97DlASed@Pxf6n+i+r4L` z%{uEyo3cfGUgK#sc4hlxe9mtDI36q{Wz6cg8(Is`^?!}p7hIitji>k8mBwIAD_Zn} z|2z*5B_kqq{B2zdmA`E|S8myh=^=PepST(N9E7yYlH%PML&1o5w(Nv(XE=Kz!szGo z=+}&X7yokN9^f9mQcxa5DJxHd4CLY@Dj}8g)`c`jUx0s}Ge$W48#b_pP>6F4hewVm zG9&+%IDa5N!A?9`OGx9oYX6Q{0iEmUg3*y3dJKo){Simcs854Va(uy4G&{#9kjcq& zI6U2OcOvqtp@kyEJNDb~C@ShsPWFoQnr9jPZMk*atts z7SG|Qev(zV)-|<(nanY3qoW)Z(l+`J#8(n`sP*bG%7&4|Rb^iLkBay}xL>E&n0UqC zwtskjJkm{gw_7y3!}n>SFmOeih&^UNcx$!rp0?;u&flgJf|XmYeS0{CR>+S|Hr}Sl z9)F(1wzNR}Y+DD5pWrl}MjZX7K9&?#?ZZkzx8^_OwG9bHl!>AR2bs9bjONL7LSzl% zxt7savB$I!XFliARTr~OT%zw{_E{j0Z?KolSuGyd5#x>Sq6OHeUP%4W7a&A87*B|w z%$^1J`*G&H_eht*r|wBM1tU3K^k{0KOMl|~(@S0GBaQ^)!y3JtZDfZ+{GmncqQQ{IW9(`tn1W$}zo@e+)+`D`+K`FC35xgtWG`-c1M<-@3NAc>{_oau+8n16Z% z^jG-``x-y9qLU5o>Dpzo9lu`Yj-kGDZOENH1{AW++ACs1h)C+NKHZ|oZ13z_7Vq2^ zb4AaoA3ZeIFZhuqkDSTRO_%rQ+&Wn%9-V8}jkmOe*%^Mry^m{ft8>)X?@pbqji;q% z3;*Tx(0?Ft^gY(6Vy@1z_Z=Hp!++8LdJWMUNL;s#@x~r;1dM0(ujh@c)4%fqh(X-fL@w=GFBI-}7~;=`=4F3HQ?ntPTJi*|g^_Hj4U z@B=s0b1_r5V$P{nIx@o$d3B=KUD8ckhihHJNsH&8==h+F??r2X)}WO0XMbpI^kQ*L z5ebWwkshI1M*N~2?PW&)@t*73kf|2dY-1#vHL`Yd^AM{pjqCF~>mAD&yZ)THEd}PRA)VH^l8u}oGl!ZB2 zLbRrgoXR~dx<&JHJXIDYn}4`EqNmQc-g3;vL8N4^p6=o@3wdz2=yt(~)rY;gg|v(s zz1xV|ZbVkxEk^2NNnxuwcCHX&+%uuu`6lY0Zr3{6Ro%b3Fp3@76+1^*a(E1^w53O1k|(#GWyx*XQ^S-}*T-_tgz#v2L8( zEBbExe6?eJqYxkH7whXQm*w>;nWLmJw21p)$Ts)}=2!LAQpHYceYtHu*XtDaLH1po zqp^LPZ;ZY7aPRPW+kdjtuvVn+7eiDCIYpWqPvQ~NL$0Z-&}PCnJ(ddAct&!1$7o+a zy-kb^^_#-RMnqf+C$;oz`ZheH*Ck$Xb*{I9RX#d}<*@a1r{o)dn=TM$!S}mtqldQN zV~5`-=9Xi&Nq_a@ZgN75^WXZ5A{%_R=ZX79^f!N0nfAB7jenk>{&wQrBAo%*4s_>6 zOozbygYk_Yb2wzX{g_HUQj~Sk>Wn0Uj28Y#BNdeKLK@4r@qgSCA}4j+IU$v2F^>G@ zjdx+>BnyS^+{h(yw${jI1GV$WZUax^hzdTek{fx{iC*gQ*IJ$|l#wN3F}FyF53I2n z`Tdx7J4&&Q@_%iVUKi#p4B6@&-wtG87S$-BHu-n1<+U`!KA&88M}pZ@r&LL?ookLP6j95Ha z#F-4c0*rC%V_7x5B=mv`X`RoT)SscJWXxXLk8jg%V};9@%L+#BhK}e#%X_RU10U^! zzsfp%)3v|JXLKFQ*yD37@dd2h5|Y{bHAI~=a)0!(lMOy^JGzbYw@G6m4<38ihhC4d zm&gp>xxMR$k>asW9oR`ti2bkz_Z68zZFato`=AT4gkI_)g2DBG<5>M+?;MlPz%zQJ z12G3i4?{6rzve!Qvl9LA=`%jxj_c{NqG`QAt!E5u~O|LC4OzpoCo{iU@t zcOr}u>4dR@85JfN^_^c&59b-pZ)dL377{T5MBcYCi)yC)Rn!W@SGp~BE%g!tjA;f2kfghNODMXYX&q0xek2x4K+UuhwG|Q<6W#TN) z3_T08Mk6ssWRGHP(yS$S^Z*L65A*P6t&u6ph+T}a%-X&WIc*?3rEx~5J@jOWn}61d zm8mnl%6#IhgcaH$TC;l4c9|`v5#v+0$g(DB8T}g=!*fwa&NETjfrkGA&a=#xmX0;ydU5qkH@GQ8spcoYCDM z?ZoL(laHs@r+pYZoW5(qs?4ct+JDfyA5AqD+SfC>K4P^>ARRL;X7|ihz_a%{F>*J1 zWM1L^^i?-{b!Wf9xfzj~!6z6|_s&R6fM7)I6!W6z=*FI`ImS28Pa&iY>`pXAGQJOQ z@HmA#FbI)^!{3Sd7?{y9Bm0b{<;=4EaYZHI26{?_ID0hbl-xm&OdykQ{eRq2_P9Fp zehd3j3rUmp>8klB(j0y3GuqH%-k``~ntTq{%pEPrxmHB{5ZURn{kG1>eHLa!t#D@D zTvwaQzaw4t<9Du%06YilSw|~+iq`X#tUwB86bkXfT4o1#M!m43Cm5cCtxaW3yLYKS zp6z6w_c8aiguUSB5i`Q5)qgy@a&Mq{PGnLMa-+c}KHJS-!`>NFhJVJ4_IYKyu#CUc z23s}v7S4JVVmzB@-X{r*>-N5MvHSFVG8B@ju27!Ob3#wae8UZM z7Ur8}qL*5TxF$b!*a3Lw-to-m`rR_oPd=Y$DC-{~oP8$5xb|{Ie}5*tr$Vx$K3y@z z68Y)+>tRnTx}sAf+Ln@TZQ$yxh^64^UEe7k^BjcO#uZ)Pbwe-ciWmasC$1zKiaz2M zo@nHNOB91y+e#MWND!H2VI*>;`xVRzi;3Nf-!!Lu(BfJ-=Zk*-m22Z{hLwBfi9IXt zY%xs+!8-!eY!kJapUiJDUVOD*HkbAT!?Ys@aVVeyw);$KeV`(yX;h0x{2)x$5En`Nm5bxM?Wci7#1x8|sBqA>z^zN^oQ^9F=tDCb0xq8>B z!e{G4W(Xs*9)CVNeM^_1MC#ig=1#6I+Y;@!CARxv=DZNC^$)}=Yv=LV=CvNtdl_&2 zu;l0sU&HG~e!9ei4|Wz=?v_Z2^bS>x-}A2VRr+2P+OWJa4u~Z_hmO zcU|dC?0=B4ZgkAS-G15H!QT-wknykA#nbVGyiqdx--N{YC`SBa3;)ToVoCl^c%2cE zjzJI8{*pN|mOwf(@%`o2FcWisvMErG?yptO7zm^y%MqeW&(9_k1!v9f$b7>3U?Kj{ z8@|KtL{7WE=M^*kcBIvy-rlLU!|xNd;K-_X8h?=!i-=eTW>xNVV|pPYx%0Q>q`Qir zk%6zDLL|42{X=#{^e~pQ#R)inC*-)HXIqGDSUhieq=p{nonx9R$A3mhj~vsf>s#Y4TLK!cWKc#ff1b^T%GdQsgV);P=@R>8rRD27`%)uRES@` zS%2kbp2#djlooeeJDM@Fx+N$$vqwndsRZHF<=U4mzP(ZZ2&oU5-mcXL=IX|z*@+%N zA&qBC?&{7{0CycNqg}Pd#0z##is>aC?VT;^T=-_S9bPj;PAJ4`T(}EG@Kzgnv}S%u*pfF!y+io^Fg$ZtJOF#psT%x;V38 zTU62GXI$qECueMT-C+E-c;$HU*t-*)}5B=5O#CFkx^nivt-y?uvou=wf6yWMB$ zX#4Ld%t5}r`}?@-)*i_Ue`b`#-RSr5T#?J{F{5cVBF}je)fQ{x9#K1zJ@}qZOMg5O zMu_t)xjje982{N*CysY+%7W$dwqoEqo{%M51GC&B(8V)Tw+QXTTDZMNdTfV?if^_y z)@qN}T72%Jr(Q@~=mp)PEZo;nNIk5BMKU_hM;G#=AO7CS8+tJIj&@J@JKIx7pTquR zhxn#Ca3A(_*n8KGEGw+*&&ipk|2b_ia=&k4$DBYGTg1V3S&H4yKJ-)U7)`{h zb4^wn|IV+@|KbXwn)sO~TOA{~`!9nPt(sTk50O?k+Xv#ooP8#waVFV*Gk;I?Z11;= zV{NPuSyudQ;(3@8e7;n;D~*s=v5VOGa$V?yJYP!}eZ=RpA9q_w8<=4n5q|FL9y7KV zvYaEX$5U5M*pL_pJo>*d;(3z(q5nWg&UjA)arBFwDDpw}ep1a9^9F^;TIbJn9e7-W zH0y`mZ%$fmVy^BU^2`_edI+)e<9Bu&=>0nRIoqR0=1IdC@+qlq^vntIhn=8K zk!4wbAdPj&iRd!cNeD@tvv7)6wrY-;_zxLU=J#Q~*bx)YIJe@IlYiLnf2xQC%Mfwe zjhQ_<)t~cutJfC#>`wcnIr089EgQ~F5+Z?sH@KzxFmiWVt`j|tF}$i{|3o3q6^Vf~ z%$_+-W)-hNi?*r!nO3%4IG%n7cVT|UJyg!j#sIhQTF zdAuVBJS#=s1R^qpScWW_iD>(a0)E`p_ACi`wtJUFpLj;fkGs8e?b%jd-GA7861<1C z%z9Q?&+VwN#D7y2El1c=-7_WZzjH+F5BgBfe&xqq&<85UWkir=Q{ekZWjMy`1L3JS zM*^X;#U+8TvD45wV!LcBpUB0;{n5e=%=I|uVdf4tB6(SKD#OYre@OCf$)BE1;ugnRlT z8jJVm&BFED=SA5$uISs9>t)W9Re^bs=SAi(-TM2*P(QkJfn3ZeyfM`Z`*q$=3LUL9 zA-SP86H>V2d-SXBnA;i-ri(KEek*c(5!r=(HTS#iLoRc_R|?9vKnD7_ZYtT4f$92` z$t#*f7=L~sy=~r~Gz!ldx@p&kJnN>I?t;IQKhYfApPY0}>6TpCf*C9PZ}yM5=FL5S z7_|~&16lRWw@l=xx1>Dr{@hZ0V7{_MRpObpx40GLKeu!}0o_JDSzhSh5u$tg18IfV zt*p%R=Y)8|{#Cc^vN1v^#6Kpv4nn#>n>v% z_f$4#$NZh^%MbefZ)A=Cc%PFx-%~%8`)yp=K@0szw|}xn@$B@^7xJImvk%sD(dHU+ zXk{iwtrH^NxDTxmyErZ2_MRqYRo)(TK7V+(`%4{TIYLBGaTkWHc+BP&QtA(+wt*4P zJ7Vw|KEbeHyo`u!;_3|Zj4|;$eob?@qo>YVW{k{v0e8%N(T8%!OAS3{fjqVbWkhpt zlRM2e#&*TE)5coT8>QWBi%oF?^wr!c+YamJt^}fEj75kk&^AaI#W4E%GYvu{|Mp7#kvT7J*cx`s z2``_qtSY*V*n{;&tvuR0uN<*=+_`ewVR=wqd#Evl#E3IObV(NG?|(#_#)Te?SED&N zY3C=+c+uDSBCnJsZ0+K6xT1B2Uzd?O&_;SyHU(PVviNkU@Wj{KKCFopVhJc?DGg&1Z%Cb?bt^<~iYIZDS~0iijb1oE{ta1AY=5PV=%#>YbexD6Aae7; z$~qysj3}#SOAF&!LZnae+vbujk9#^-<4l;ha^h?gA!cmduI!w%{g$=L_Q8trRs3zk ze%K*e0G^}v)(tl(BC`H@w|5*WeA8VMNABL%60io`{pYuh#+?M-j!nhY+0yn{t@6%i zA7+6(@omFgoPT#@;In;jL?qY}5&>L%8*hvRz;C-X=58UwG#q9sO@lhX8B)B-~>90j!%48KmUd4#YQU z3?Z#u>avp};QA<=A&`c|V$8RZ2C@r*MygiNm#Zxo_4N_7(HD>+NBV_sHTVJ2$e}2lkd!~lITccpQ-8jTkY<=gB_yh+@x0lH{?Cjgr7#q5396EmiWw(p=E_4Ezu!zAR#ghC;1o1fZ;bT{s)zqVO7 z_FM~j%u)Dtg2J5F-z|kQZ~v8Ih8~yD)T7sXIgAqRA(A9}ptt$h)w@ z9gjD7b(#41KC3(CETm}jc8SjkS)~vM6n}CJryrzfgLElFB}HSLL-`ab5;3uJMfz)Q zLf#c2UKjQK3dA3usvTWMajm0e0b3}0dEt||kG2kXVZS`7%V>&{(aRR(Nse7Cg#