diff --git a/.github/workflows/RockyArm64_build.yml b/.github/workflows/RockyArm64_build.yml deleted file mode 100644 index afeca0e..0000000 --- a/.github/workflows/RockyArm64_build.yml +++ /dev/null @@ -1,78 +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 - - 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 - ./XEngine_MQServiceApp -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_MQServiceApp-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 64% rename from .github/workflows/RockyX86_64_build.yml rename to .github/workflows/Rocky_build.yml index c8ef9ee..d3350e7 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: @@ -37,27 +47,24 @@ jobs: with: repository: libxengine/XEngine_OPenSource path: XEngine_Source/XEngine_Depend - + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: install system package run: | dnf update -y - 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 + - 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: | @@ -78,6 +85,6 @@ jobs: - name: Upload folder as artifact with RockyLinux uses: actions/upload-artifact@v4 with: - name: XEngine_MQServiceApp-RockyLinux_9_x86_64 + name: XEngine_MQServiceApp-RockyLinux_9_${{ matrix.artifact }} path: XEngine_Release/ retention-days: 1 diff --git a/.github/workflows/UbuntuArm64_build.yml b/.github/workflows/UbuntuArm64_build.yml deleted file mode 100644 index bc4cb38..0000000 --- a/.github/workflows/UbuntuArm64_build.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: ubuntu Arm64 build workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -jobs: - build: - runs-on: ubuntu-24.04 - env: - IMAGE_NAME: ubuntu:24.04 - - 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 - apt update -y - apt install 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_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 .. - - cd XEngine_Source - make ARCH=Arm64 RELEASE=1 - make FLAGS=InstallAll - make FLAGS=CleanAll - cd .. - - cd XEngine_Release - ./XEngine_MQServiceApp -t - chown -R $(id -u):$(id -g) . - chmod -R a+r . ' - - - name: Upload folder as artifact with ubuntu Arm64 - uses: actions/upload-artifact@v4 - with: - name: XEngine_MQServiceApp-Ubuntu_24.04_Arm64 - path: XEngine_Release/ - retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/UbuntuX86_64_build.yml b/.github/workflows/UbuntuX86_64_build.yml deleted file mode 100644 index 9bbe8e1..0000000 --- a/.github/workflows/UbuntuX86_64_build.yml +++ /dev/null @@ -1,90 +0,0 @@ -name: ubuntu x86_64 build workflows - -on: - push: - branches: - - 'develop' - paths: - - 'XEngine_Source/**' - - 'XEngine_Release/**' - - '.github/**' - -jobs: - build: - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-22.04 - - os: ubuntu-24.04 - runs-on: ${{ matrix.os }} - - steps: - - name: Checkout main repository code - uses: actions/checkout@v4 - with: - ref: 'develop' - - - name: Checkout dependency repository (xengine) - uses: actions/checkout@v4 - with: - repository: libxengine/libxengine - path: libxengine - - - name: sub module checkout (opensource) - run: | - git submodule init - git submodule update - - - name: Set up Dependency ubuntu24.04 Environment - if: matrix.os == 'ubuntu-24.04' - run: | - cd libxengine - chmod 777 * - sudo ./XEngine_LINEnv.sh -i 3 - - 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 - - - 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_MQServiceApp -t - - - name: Upload folder as artifact with ubuntu22.04 - if: matrix.os == 'ubuntu-22.04' - uses: actions/upload-artifact@v4 - with: - name: XEngine_MQServiceApp-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_MQServiceApp-Ubuntu_24.04_x86_64 - path: XEngine_Release/ - retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/Ubuntu_build.yml b/.github/workflows/Ubuntu_build.yml new file mode 100644 index 0000000..6138309 --- /dev/null +++ b/.github/workflows/Ubuntu_build.yml @@ -0,0 +1,124 @@ +name: ubuntu build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-22.04 + - os: ubuntu-24.04 + - os: ubuntu-22.04-arm + - os: ubuntu-24.04-arm + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout main repository code + uses: actions/checkout@v4 + with: + ref: 'develop' + + - name: Checkout dependency repository (xengine) + uses: actions/checkout@v4 + with: + repository: libxengine/libxengine + path: libxengine + + - name: sub module checkout (opensource) + run: | + git submodule init + git submodule update + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: Set up Dependency ubuntu24.04 x86-64 Environment + if: matrix.os == 'ubuntu-24.04' + run: | + cd libxengine + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu22.04 x86-64 Environment + if: matrix.os == 'ubuntu-22.04' + 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_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 + + chmod 777 * + sudo ./XEngine_LINEnv.sh -i 3 + - name: Set up Dependency ubuntu22.04 arm 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 ubuntu24.04 arm 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 + make + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_MQServiceApp -t + + - name: Upload folder as artifact with ubuntu22.04 x86-64 + if: matrix.os == 'ubuntu-22.04' + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-Ubuntu_22.04_x86_64 + path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu24.04 x86-64 + if: matrix.os == 'ubuntu-24.04' + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-Ubuntu_24.04_x86_64 + path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu22.04 Arm64 + if: matrix.os == 'ubuntu-22.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-Ubuntu_22.04_Arm64 + path: XEngine_Release/ + retention-days: 1 + - name: Upload folder as artifact with ubuntu24.04 Arm64 + if: matrix.os == 'ubuntu-24.04-arm' + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-Ubuntu_24.04_Arm64 + path: XEngine_Release/ + retention-days: 1 \ No newline at end of file diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1716d18..30a3ccf 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -40,6 +40,9 @@ jobs: git submodule init git submodule update + - 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 new file mode 100644 index 0000000..1781146 --- /dev/null +++ b/.github/workflows/debian_build.yml @@ -0,0 +1,84 @@ +name: debian build workflows + +on: + push: + branches: + - 'develop' + paths: + - 'XEngine_Source/**' + - 'XEngine_Release/**' + - '.github/**' + +permissions: + contents: read + +jobs: + build: + runs-on: ${{ matrix.runner }} + container: + image: debian:bookworm + options: --platform ${{ matrix.platform }} + strategy: + matrix: + include: + - arch: amd64 + runner: ubuntu-24.04 + platform: linux/amd64 + 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 (opensource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + + - name: install system package + run: | + apt update -y + apt install gcc g++ make git jq unzip curl wget -y + + - 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_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 + make FLAGS=InstallAll + make FLAGS=CleanAll + + make RELEASE=1 + make FLAGS=InstallAll + make FLAGS=CleanAll + cd .. + - name: test + run: | + cd XEngine_Release + ./XEngine_MQServiceApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-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..93dfc85 --- /dev/null +++ b/.github/workflows/fedora_build.yml @@ -0,0 +1,89 @@ +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 (opensource) + uses: actions/checkout@v4 + with: + repository: libxengine/XEngine_OPenSource + path: XEngine_Source/XEngine_Depend + + - name: install system package + run: | + dnf update -y + dnf install gcc g++ make git jq unzip wget -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_MQServiceApp -t + + - name: Upload folder as artifact + uses: actions/upload-artifact@v4 + with: + name: XEngine_MQServiceApp-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 e3edb2d..df0d78e 100644 --- a/.github/workflows/macbuild.yml +++ b/.github/workflows/macbuild.yml @@ -35,6 +35,9 @@ jobs: git submodule init git submodule update + - name: Set TERM variable + run: echo "TERM=xterm" >> $GITHUB_ENV + - name: brew install run: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" @@ -47,20 +50,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 1b3fb91..6cda358 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,37 +16,37 @@ jobs: with: fetch-depth: 0 - - name: Download ubuntubuild x86_64 + - 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 ubuntubuild Arm64 + - name: Download fedora build uses: dawidd6/action-download-artifact@v6 with: - workflow: UbuntuArm64_build.yml + workflow: fedora_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download Rockylinux Arm64 + - name: Download debian build uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyArm64_build.yml + workflow: debian_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true if_no_artifact_found: fail path: ./XRelease/ - - name: Download Rockylinux x86_64 + - name: Download Rockylinux uses: dawidd6/action-download-artifact@v6 with: - workflow: RockyX86_64_build.yml + workflow: Rocky_build.yml workflow_conclusion: success check_artifacts: false skip_unpack: true diff --git a/CHANGELOG b/CHANGELOG index fd32663..a3b41ee 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,39 @@ +XEngine_MQService V3.16.0.1001 + +增加:使用内存池发送数据 +增加:CI发布更多系统支持 +增加:HTTP创建主题支持 +更新:编译脚本 +更新:依赖库 +修改:调整用户默认注册级别 +修改:只有在发布版本下才发送信息报告了 +修改:注册和删除协议使用HTTP替代 +修改:http获取方法移动合并到新的目录 +修改:调整http验证方法,现在使用token替代了 +修改:http请求api 使用post并且只有post才做验证 +修改:区分了http的get和post处理 +修改:http删除和创建主题名称并且都交给tcp代码处理 +修改:tcp处理支持http协议了 +修复:删除协议解析不生效 +删除:多余代码 + +added:memory pool send message +added:ci more release support +added:create topic support for http +update:make file build flags +update:depend library +modify:adjust user register level +modify:only release work for report info and improved get time function +modify:register and delete protocol use http instead +modify:http get method move to http task dir +modify:adjust http authorize method.now it use token instead with get +modify:http request info api to post and post verification +modify:The http protocol distinguishes the API get information +modify:delete and create topic convert to tcp handle +modify:tcp task handle http type support +fixed:delete not parse protocol +delete:redundant functions +====================================================================================== XEngine_MQService V3.15.0.1001 增加:HTTP验证授权支持 diff --git a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.cpp b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.cpp index e8ca707..22f52ca 100644 --- a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.cpp +++ b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -20,10 +21,32 @@ //VS2022 Debug x86 Compile //g++ -std=c++17 -Wall -g MQCore_HTTPApp.cpp -o MQCore_HTTPApp.exe -lXEngine_BaseLib -lXClient_APIHelp +__int64x xhToken = 0; +void MQ_UserRegister() +{ + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=register"); -void MQ_GetUserList() + Json::Value st_JsonRoot; + Json::Value st_JsonUser; + st_JsonUser["tszUserName"] = "123123aa"; + st_JsonUser["tszUserPass"] = "123123"; + st_JsonUser["tszEMailAddr"] = "xxx@ad.com"; + st_JsonUser["nPhoneNumber"] = 1369999999; + st_JsonUser["nIDNumber"] = 5111111111110; + st_JsonRoot["st_UserInfo"] = st_JsonUser; + int nLen = 0; + XCHAR* ptszMsgBody = NULL; + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) + { + _xtprintf("发送投递失败!\n"); + return; + } + _xtprintf("MQ_UserRegister:%s\n", ptszMsgBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); +} +void MQ_UserLogin() { - LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=get&method=user"); + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=login&user=123123aa&pass=123123"); int nLen = 0; XCHAR* ptszMsgBody = NULL; @@ -32,16 +55,69 @@ void MQ_GetUserList() _xtprintf("发送投递失败!\n"); return; } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBody, ptszMsgBody + nLen, &st_JsonRoot, &st_JsonError)) + { + return; + } + xhToken = _ttxoll(st_JsonRoot["msg"].asCString()); + + _xtprintf("MQ_UserLogin:%s\n", ptszMsgBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); +} +void MQ_UserDelete() +{ + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=deluser"); + + Json::Value st_JsonRoot; + Json::Value st_JsonUser; + st_JsonUser["tszUserName"] = "123123aa"; + st_JsonUser["tszUserPass"] = "123123"; + st_JsonUser["tszEMailAddr"] = "xxx@ad.com"; + st_JsonUser["nPhoneNumber"] = 1369999999; + st_JsonUser["nIDNumber"] = 5111111111110; + st_JsonRoot["st_UserInfo"] = st_JsonUser; + int nLen = 0; + XCHAR* ptszMsgBody = NULL; + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) + { + _xtprintf("发送投递失败!\n"); + return; + } + _xtprintf("MQ_UserDelete:%s\n", ptszMsgBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); +} +void MQ_GetUserList() +{ + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=getuser"); + + Json::Value st_JsonRoot; + st_JsonRoot["xhToken"] = xhToken; + + int nLen = 0; + XCHAR* ptszMsgBody = NULL; + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) + { + _xtprintf("发送投递失败!\n"); + return; + } _xtprintf("MQ_GetUserList:%s\n", ptszMsgBody); BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); } void MQ_GetOnlineList() { - LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=get&method=online&type=0"); + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=getonline"); + + Json::Value st_JsonRoot; + st_JsonRoot["xhToken"] = xhToken; int nLen = 0; XCHAR* ptszMsgBody = NULL; - if (!APIClient_Http_Request(_X("GET"), lpszPostUrl, NULL, NULL, &ptszMsgBody, &nLen)) + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) { _xtprintf("发送投递失败!\n"); return; @@ -49,13 +125,60 @@ void MQ_GetOnlineList() _xtprintf("MQ_GetOnlineList:%s\n", ptszMsgBody); BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); } +void MQ_TopicCreate() +{ + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=createtopic"); + + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + + st_JsonObject["name"] = "topictest"; + + st_JsonRoot["xhToken"] = xhToken; + st_JsonRoot["Object"] = st_JsonObject; + + int nLen = 0; + XCHAR* ptszMsgBody = NULL; + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) + { + _xtprintf("发送投递失败!\n"); + return; + } + _xtprintf("MQ_TopicCreate:%s\n", ptszMsgBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); +} +void MQ_TopicDelete() +{ + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=deletetopic"); + + Json::Value st_JsonRoot; + Json::Value st_JsonObject; + + st_JsonObject["name"] = "topictest"; + + st_JsonRoot["xhToken"] = xhToken; + st_JsonRoot["Object"] = st_JsonObject; + + int nLen = 0; + XCHAR* ptszMsgBody = NULL; + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) + { + _xtprintf("发送投递失败!\n"); + return; + } + _xtprintf("MQ_TopicDelete:%s\n", ptszMsgBody); + BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBody); +} void MQ_GetTopicList() { - LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=get&method=topic"); + LPCXSTR lpszPostUrl = _X("http://127.0.0.1:5202/api?function=getlist"); + + Json::Value st_JsonRoot; + st_JsonRoot["xhToken"] = xhToken; int nLen = 0; XCHAR* ptszMsgBody = NULL; - if (!APIClient_Http_Request(_X("GET"), lpszPostUrl, NULL, NULL, &ptszMsgBody, &nLen)) + if (!APIClient_Http_Request(_X("POST"), lpszPostUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBody, &nLen)) { _xtprintf("发送投递失败!\n"); return; @@ -71,10 +194,14 @@ int main() WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif + MQ_UserRegister(); + MQ_UserLogin(); MQ_GetUserList(); MQ_GetOnlineList(); + MQ_TopicCreate(); MQ_GetTopicList(); - + MQ_TopicDelete(); + MQ_UserDelete(); #ifdef _MSC_BUILD WSACleanup(); #endif diff --git a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj index 28e53fe..37db60e 100644 --- a/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj +++ b/XEngine_Apps/MQCore_HTTPApp/MQCore_HTTPApp.vcxproj @@ -72,7 +72,7 @@ true - $(XEngine_Include);$(IncludePath) + $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) diff --git a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp index 855630b..a6eaac5 100644 --- a/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp +++ b/XEngine_Apps/MQCore_TCPApp/MQCore_TCPApp.cpp @@ -28,57 +28,6 @@ LPCXSTR lpszKey = _X("XEngine_CommKey"); //主题 LPCXSTR lpszUser = _X("aaadddzxc"); LPCXSTR lpszPass = _X("123123"); -void MQ_Register() -{ - int nLen = 0; - XENGINE_PROTOCOLHDR st_ProtocolHdr; - XENGINE_PROTOCOL_USERINFO st_ProtocolInfo; - XCHAR tszMsgBuffer[2048]; - - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); - memset(&st_ProtocolInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO)); - - st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; - st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; - st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERREG; - st_ProtocolHdr.byVersion = 1; - st_ProtocolHdr.byIsReply = true; //获得处理返回结果 - st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; - - st_ProtocolInfo.nUserLevel = 0; - st_ProtocolInfo.nUserState = 0; - st_ProtocolInfo.nPhoneNumber = 13699999999; - st_ProtocolInfo.nIDNumber = 511000000000101010; - strcpy(st_ProtocolInfo.tszUserName, lpszUser); - strcpy(st_ProtocolInfo.tszUserPass, lpszPass); - strcpy(st_ProtocolInfo.tszEMailAddr, "486179@qq.com"); - - st_ProtocolHdr.unPacketSize = sizeof(XENGINE_PROTOCOL_USERINFO); - - nLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize; - memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); - memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), &st_ProtocolInfo, sizeof(XENGINE_PROTOCOL_USERINFO)); - - if (!XClient_TCPSelect_SendMsg(m_Socket, tszMsgBuffer, nLen)) - { - _xtprintf("发送投递失败!\n"); - return; - } - nLen = 0; - XCHAR* ptszMsgBuffer; - memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); - if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nLen, &st_ProtocolHdr)) - { - _xtprintf("接受数据失败!\n"); - return; - } - _xtprintf("%d\n", st_ProtocolHdr.wReserve); - if (nLen > 0) - { - BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - } -} void MQ_Authorize() { int nLen = 0; @@ -177,55 +126,6 @@ void MQ_GetUNRead(int nType = 0) std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } -//删除用户 -void MQ_DeleteUser() -{ - int nLen = 0; - XENGINE_PROTOCOLHDR st_ProtocolHdr; - XENGINE_PROTOCOL_USERINFO st_ProtocolInfo; - XCHAR tszMsgBuffer[2048]; - - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); - memset(&st_ProtocolInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO)); - - st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; - st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; - st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERDEL; - st_ProtocolHdr.byVersion = 1; - st_ProtocolHdr.byIsReply = true; - st_ProtocolHdr.unPacketSize = sizeof(XENGINE_PROTOCOL_USERINFO); - st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; - - st_ProtocolInfo.nUserLevel = 0; - st_ProtocolInfo.nUserState = 0; - st_ProtocolInfo.nPhoneNumber = 13699999999; - st_ProtocolInfo.nIDNumber = 511000000000101010; - strcpy(st_ProtocolInfo.tszUserName, lpszUser); - strcpy(st_ProtocolInfo.tszUserPass, lpszPass); - strcpy(st_ProtocolInfo.tszEMailAddr, "486179@qq.com"); - - nLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize; - memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); - memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), &st_ProtocolInfo, sizeof(XENGINE_PROTOCOL_USERINFO)); - - if (!XClient_TCPSelect_SendMsg(m_Socket, tszMsgBuffer, nLen)) - { - _xtprintf("发送投递失败!\n"); - return; - } - nLen = 2048; - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nLen)) - { - _xtprintf("接受数据失败!\n"); - return; - } - memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); - memcpy(&st_ProtocolHdr, tszMsgBuffer, sizeof(XENGINE_PROTOCOLHDR)); - - return; -} void MQ_Create() { @@ -628,7 +528,6 @@ int main(int argc, char** argv) } _xtprintf("连接成功!\n"); - MQ_Register(); MQ_Authorize(); MQ_GetUNRead(); MQ_Create(); @@ -647,7 +546,6 @@ int main(int argc, char** argv) MQ_Get(ENUM_XENGINE_PROTOCOLHDR_PAYLOAD_TYPE_STRING); MQ_TimePublish(); MQ_DeleteTopic(); - MQ_DeleteUser(); std::this_thread::sleep_for(std::chrono::seconds(1)); XClient_TCPSelect_Close(m_Socket); diff --git a/XEngine_Apps/VSCopy-x64.bat b/XEngine_Apps/VSCopy-x64.bat index 369235a..2cf0808 100644 --- a/XEngine_Apps/VSCopy-x64.bat +++ b/XEngine_Apps/VSCopy-x64.bat @@ -1,4 +1,5 @@ copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_BaseSafe.dll" "./" copy /y "%XEngine_Lib64%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_ManagePool.dll" "./" diff --git a/XEngine_Apps/VSCopy-x86.bat b/XEngine_Apps/VSCopy-x86.bat index ece7865..da63b51 100644 --- a/XEngine_Apps/VSCopy-x86.bat +++ b/XEngine_Apps/VSCopy-x86.bat @@ -1,4 +1,5 @@ copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseLib.dll" "./" +copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_BaseSafe.dll" "./" copy /y "%XEngine_Lib32%\XEngine_BaseLib\XEngine_Algorithm.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_Cryption.dll" "./" copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_ManagePool.dll" "./" diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 042cbc8..7c700ba 100644 Binary files a/XEngine_Docment/Docment_en.docx and b/XEngine_Docment/Docment_en.docx differ diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 3600586..ada521d 100644 Binary files a/XEngine_Docment/Docment_zh.docx and b/XEngine_Docment/Docment_zh.docx differ diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 169ef61..2e64c81 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -43,9 +43,7 @@ "nTimeCount":0 }, "XAuthorize":{ - "bHTTPAuth":true, - "tszHTTPPass":"", - "tszToken":"MQPasskey" + "bHTTPAuth":true }, "XReport":{ "bEnable":true, diff --git a/XEngine_Release/XEngine_Config/XEngine_VerConfig.json b/XEngine_Release/XEngine_Config/XEngine_VerConfig.json index 19dc911..5fc8e48 100644 --- a/XEngine_Release/XEngine_Config/XEngine_VerConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_VerConfig.json @@ -1,5 +1,6 @@ { "XVer":[ + "3.16.0.1001 Build20250524", "3.15.0.1001 Build20250313", "3.14.0.1001 Build20250120", "3.13.0.1001 Build20241129", diff --git a/XEngine_Source/MQCore_ConfigModule/Config_Define.h b/XEngine_Source/MQCore_ConfigModule/Config_Define.h index b90cca0..438f52f 100644 --- a/XEngine_Source/MQCore_ConfigModule/Config_Define.h +++ b/XEngine_Source/MQCore_ConfigModule/Config_Define.h @@ -67,8 +67,6 @@ typedef struct struct { bool bHTTPAuth; - XCHAR tszHTTPPass[MAX_PATH]; - XCHAR tszToken[MAX_PATH]; }st_XAuthorize; struct { diff --git a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp index 27677c1..f6b7f8f 100644 --- a/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp +++ b/XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp @@ -137,7 +137,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG pSt_ServerConfig->st_XMemory.nTimeLast = st_JsonXMemory["nTimeLast"].asInt(); pSt_ServerConfig->st_XMemory.nTimeCount = st_JsonXMemory["nTimeCount"].asInt(); - if (st_JsonRoot["XAuthorize"].empty() || (3 != st_JsonRoot["XAuthorize"].size())) + if (st_JsonRoot["XAuthorize"].empty() || (1 != st_JsonRoot["XAuthorize"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MQ_MODULE_CONFIG_JSON_XAUTHORIZE; @@ -145,8 +145,6 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG } Json::Value st_JsonXAuthorize = st_JsonRoot["XAuthorize"]; pSt_ServerConfig->st_XAuthorize.bHTTPAuth = st_JsonXAuthorize["bHTTPAuth"].asBool(); - _tcsxcpy(pSt_ServerConfig->st_XAuthorize.tszHTTPPass, st_JsonXAuthorize["tszHTTPPass"].asCString()); - _tcsxcpy(pSt_ServerConfig->st_XAuthorize.tszToken, st_JsonXAuthorize["tszToken"].asCString()); if (st_JsonRoot["XReport"].empty() || (3 != st_JsonRoot["XReport"].size())) { diff --git a/XEngine_Source/MQCore_ConfigModule/Makefile b/XEngine_Source/MQCore_ConfigModule/Makefile index e6ecf33..62da2d6 100644 --- a/XEngine_Source/MQCore_ConfigModule/Makefile +++ b/XEngine_Source/MQCore_ConfigModule/Makefile @@ -1,10 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp LIB = -ljsoncpp @@ -12,25 +9,29 @@ LIBEX = OBJECTS = Config_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) +override UNICODE := -D __UNICODE__ +else +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 @@ -39,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 @@ -51,10 +51,10 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_ConfigModule.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) Config_Json.o:./Config_Json/Config_Json.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./Config_Json/Config_Json.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./Config_Json/Config_Json.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/MQCore_DBModule/Makefile b/XEngine_Source/MQCore_DBModule/Makefile index 1c3d89f..91d7445 100644 --- a/XEngine_Source/MQCore_DBModule/Makefile +++ b/XEngine_Source/MQCore_DBModule/Makefile @@ -1,10 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ LOADSO = -L ../MQCore_MemoryCache LIB = -lXEngine_BaseLib -lHelpComponents_DataBase -lMQCore_MemoryCache @@ -12,25 +9,29 @@ LIBEX = OBJECTS = DBModule_MQData.o DBModule_MQUser.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) +override UNICODE := -D __UNICODE__ +else +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 @@ -39,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 @@ -51,12 +51,12 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_DBModule.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) DBModule_MQData.o:./DBModule_MQData/DBModule_MQData.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./DBModule_MQData/DBModule_MQData.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./DBModule_MQData/DBModule_MQData.cpp DBModule_MQUser.o:./DBModule_MQUser/DBModule_MQUser.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./DBModule_MQUser/DBModule_MQUser.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./DBModule_MQUser/DBModule_MQUser.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/MQCore_HelpModule/APIHelp_Define.h b/XEngine_Source/MQCore_HelpModule/APIHelp_Define.h index a152dbe..b011c37 100644 --- a/XEngine_Source/MQCore_HelpModule/APIHelp_Define.h +++ b/XEngine_Source/MQCore_HelpModule/APIHelp_Define.h @@ -68,4 +68,21 @@ extern "C" bool APIHelp_Counter_SerialGet(LPCXSTR lpszQueueName, __int64x* pInt_ 意思:是否成功 备注: *********************************************************************/ -extern "C" bool APIHelp_Counter_SerialDel(LPCXSTR lpszQueueName); \ No newline at end of file +extern "C" bool APIHelp_Counter_SerialDel(LPCXSTR lpszQueueName); +/************************************************************************* + 通用帮助函数导出 +**************************************************************************/ +/******************************************************************** +函数名称:APIHelp_MQHelp_ProtocolToHex +函数功能:协议转二进制 + 参数.一:pSt_ProtocolHdr + In/Out:In/Out + 类型:数据结构指针 + 可空:N + 意思:打包的协议 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool APIHelp_MQHelp_JsonToHex(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr); \ No newline at end of file diff --git a/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.cpp b/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.cpp new file mode 100644 index 0000000..a370868 --- /dev/null +++ b/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.cpp @@ -0,0 +1,49 @@ +#include "pch.h" +#include "APIHelp_MQHelp.h" +/******************************************************************** +// Created: 2025/05/23 14:16:56 +// File Name: D:\XEngine_MQService\XEngine_Source\MQCore_HelpModule\APIHelp_MQHelp\APIHelp_MQHelp.cpp +// File Path: D:\XEngine_MQService\XEngine_Source\MQCore_HelpModule\APIHelp_MQHelp +// File Base: APIHelp_MQHelp +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: 通用帮助函数 +// History: +*********************************************************************/ +CAPIHelp_MQHelp::CAPIHelp_MQHelp() +{ +} +CAPIHelp_MQHelp::~CAPIHelp_MQHelp() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:APIHelp_MQHelp_ProtocolToHex +函数功能:协议转二进制 + 参数.一:pSt_ProtocolHdr + In/Out:In/Out + 类型:数据结构指针 + 可空:N + 意思:打包的协议 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAPIHelp_MQHelp::APIHelp_MQHelp_JsonToHex(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) +{ + APIHelp_IsErrorOccur = false; + + pSt_ProtocolHdr->wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER; + pSt_ProtocolHdr->byIsReply = true; + pSt_ProtocolHdr->byVersion = ENUM_XENGINE_PROTOCOLHDR_PAYLOAD_TYPE_BIN; + pSt_ProtocolHdr->unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_XMQ; + pSt_ProtocolHdr->unPacketSize = sizeof(XENGINE_PROTOCOL_XMQ); + pSt_ProtocolHdr->wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL; + + return true; +} \ No newline at end of file diff --git a/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.h b/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.h new file mode 100644 index 0000000..80212f4 --- /dev/null +++ b/XEngine_Source/MQCore_HelpModule/APIHelp_MQHelp/APIHelp_MQHelp.h @@ -0,0 +1,23 @@ +#pragma once +/******************************************************************** +// Created: 2025/05/23 14:16:30 +// File Name: D:\XEngine_MQService\XEngine_Source\MQCore_HelpModule\APIHelp_MQHelp\APIHelp_MQHelp.h +// File Path: D:\XEngine_MQService\XEngine_Source\MQCore_HelpModule\APIHelp_MQHelp +// File Base: APIHelp_MQHelp +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 通用帮助函数 +// History: +*********************************************************************/ + +class CAPIHelp_MQHelp +{ +public: + CAPIHelp_MQHelp(); + ~CAPIHelp_MQHelp(); +public: + bool APIHelp_MQHelp_JsonToHex(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr); +protected: +private: +}; \ No newline at end of file diff --git a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.def b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.def index bcadb6a..2185926 100644 --- a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.def +++ b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.def @@ -5,4 +5,6 @@ EXPORTS APIHelp_Counter_SerialSet APIHelp_Counter_SerialGet - APIHelp_Counter_SerialDel \ No newline at end of file + APIHelp_Counter_SerialDel + + APIHelp_MQHelp_JsonToHex \ No newline at end of file diff --git a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj index bc15647..b3a8417 100644 --- a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj +++ b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj @@ -233,11 +233,13 @@ + + Create diff --git a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj.filters b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj.filters index cf7c225..6e10664 100644 --- a/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj.filters +++ b/XEngine_Source/MQCore_HelpModule/MQCore_HelpModule.vcxproj.filters @@ -19,6 +19,12 @@ {75ffe4ca-a70b-4320-98d0-219b06839ac3} + + {0d962ca1-ecd7-42ec-a59d-8a9e2f8eb1d9} + + + {343456e5-68f5-4e4e-9e32-61b7e0418105} + @@ -36,6 +42,9 @@ 头文件 + + 头文件\APIHelp_MQHelp + @@ -47,6 +56,9 @@ 源文件\APIHelp_Counter + + 源文件\APIHelp_MQHelp + diff --git a/XEngine_Source/MQCore_HelpModule/Makefile b/XEngine_Source/MQCore_HelpModule/Makefile index a2935b6..d2d60e0 100644 --- a/XEngine_Source/MQCore_HelpModule/Makefile +++ b/XEngine_Source/MQCore_HelpModule/Makefile @@ -1,36 +1,37 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ LOADSO = LIB = LIBEX = -OBJECTS = APIHelp_Counter.o pch.o +OBJECTS = APIHelp_Counter.o APIHelp_MQHelp.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) +override UNICODE := -D __UNICODE__ +else +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 @@ -39,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 @@ -51,10 +51,12 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_HelpModule.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) APIHelp_Counter.o:./APIHelp_Counter/APIHelp_Counter.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./APIHelp_Counter/APIHelp_Counter.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./APIHelp_Counter/APIHelp_Counter.cpp +APIHelp_MQHelp.o:./APIHelp_MQHelp/APIHelp_MQHelp.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./APIHelp_MQHelp/APIHelp_MQHelp.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/MQCore_HelpModule/pch.cpp b/XEngine_Source/MQCore_HelpModule/pch.cpp index bb3d233..6590cf4 100644 --- a/XEngine_Source/MQCore_HelpModule/pch.cpp +++ b/XEngine_Source/MQCore_HelpModule/pch.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "APIHelp_Counter/APIHelp_Counter.h" +#include "APIHelp_MQHelp/APIHelp_MQHelp.h" /******************************************************************** // Created: 2025/03/11 14:51:51 // File Name: D:\XEngine_MQService\XEngine_Source\MQCore_HelpModule\pch.cpp @@ -15,6 +16,7 @@ bool APIHelp_IsErrorOccur = false; XLONG APIHelp_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CAPIHelp_Counter m_HelpCounter; +CAPIHelp_MQHelp m_MQHelp; ////////////////////////////////////////////////////////////////////////// // 导出的函数 ////////////////////////////////////////////////////////////////////////// @@ -40,4 +42,11 @@ extern "C" bool APIHelp_Counter_SerialGet(LPCXSTR lpszQueueName, __int64x* pInt_ extern "C" bool APIHelp_Counter_SerialDel(LPCXSTR lpszQueueName) { return m_HelpCounter.APIHelp_Counter_SerialDel(lpszQueueName); +} +/************************************************************************* + 通用帮助函数导出 +**************************************************************************/ +extern "C" bool APIHelp_MQHelp_JsonToHex(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) +{ + return m_MQHelp.APIHelp_MQHelp_JsonToHex(pSt_ProtocolHdr); } \ No newline at end of file diff --git a/XEngine_Source/MQCore_HelpModule/pch.h b/XEngine_Source/MQCore_HelpModule/pch.h index 5efbc19..866cd14 100644 --- a/XEngine_Source/MQCore_HelpModule/pch.h +++ b/XEngine_Source/MQCore_HelpModule/pch.h @@ -21,6 +21,7 @@ #include #include #include +#include "../XQueue_ProtocolHdr.h" #include "APIHelp_Define.h" #include "APIHelp_Error.h" /******************************************************************** diff --git a/XEngine_Source/MQCore_MemoryCache/Makefile b/XEngine_Source/MQCore_MemoryCache/Makefile index 0bf5aa7..e19062f 100644 --- a/XEngine_Source/MQCore_MemoryCache/Makefile +++ b/XEngine_Source/MQCore_MemoryCache/Makefile @@ -1,10 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ LOADSO = LIB = -lHelpComponents_DataBase @@ -12,25 +9,29 @@ LIBEX = OBJECTS = MemoryCache_DBData.o MemoryCache_DBUser.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) +override UNICODE := -D __UNICODE__ +else +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 @@ -39,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 @@ -51,12 +51,12 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_MemoryCache.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) MemoryCache_DBData.o:./MemoryCache_DBData/MemoryCache_DBData.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MemoryCache_DBData/MemoryCache_DBData.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MemoryCache_DBData/MemoryCache_DBData.cpp MemoryCache_DBUser.o:./MemoryCache_DBUser/MemoryCache_DBUser.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MemoryCache_DBUser/MemoryCache_DBUser.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MemoryCache_DBUser/MemoryCache_DBUser.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def index 075760d..f0d3201 100644 --- a/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def +++ b/XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def @@ -17,4 +17,8 @@ EXPORTS ProtocolModule_Packet_UNReadInsert ProtocolModule_Packet_UNReadDelete - ProtocolModule_Parse_Websocket \ No newline at end of file + ProtocolModule_Parse_Websocket + ProtocolModule_Parse_Register + ProtocolModule_Parse_Token + ProtocolModule_Parse_Type + ProtocolModule_Parse_Name \ No newline at end of file diff --git a/XEngine_Source/MQCore_ProtocolModule/Makefile b/XEngine_Source/MQCore_ProtocolModule/Makefile index da415a8..e7ffeba 100644 --- a/XEngine_Source/MQCore_ProtocolModule/Makefile +++ b/XEngine_Source/MQCore_ProtocolModule/Makefile @@ -1,10 +1,7 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ -I ../XEngine_Depend/XEngine_Module/jsoncpp LOADSO = -L ../XEngine_Depend/XEngine_Module/jsoncpp LIB = -ljsoncpp -lXEngine_BaseLib -lXEngine_Cryption -lRfcComponents_MQTTProtocol @@ -12,25 +9,29 @@ LIBEX = OBJECTS = ProtocolModule_Packet.o ProtocolModule_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) +override UNICODE := -D __UNICODE__ +else +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 @@ -39,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 @@ -51,12 +51,12 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_ProtocolModule.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) ProtocolModule_Packet.o:./ProtocolModule_Packet/ProtocolModule_Packet.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./ProtocolModule_Packet/ProtocolModule_Packet.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ProtocolModule_Packet/ProtocolModule_Packet.cpp ProtocolModule_Parse.o:./ProtocolModule_Parse/ProtocolModule_Parse.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./ProtocolModule_Parse/ProtocolModule_Parse.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ProtocolModule_Parse/ProtocolModule_Parse.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp index e3a11a6..cfdeb65 100644 --- a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp +++ b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp @@ -75,6 +75,10 @@ bool CProtocolModule_Packet::ProtocolModule_Packet_Common(int nNetType, XENGINE_ { ProtocolModule_Packet_WSCommon(pSt_ProtocolHdr, pSt_MQProtocol, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); } + else if (XENGINE_MQAPP_NETTYPE_HTTP == nNetType) + { + ProtocolModule_Packet_Http(ptszMsgBuffer, pInt_MsgLen, pSt_ProtocolHdr->wReserve); + } else { ProtocolModule_Packet_MQTTCommon(pSt_ProtocolHdr, pSt_MQProtocol, ptszMsgBuffer, pInt_MsgLen, lpszMsgBuffer, nMsgLen); diff --git a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp index 7f12c5b..c5267aa 100644 --- a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp +++ b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp @@ -218,5 +218,245 @@ bool CProtocolModule_Parse::ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer *pInt_MsgLen += st_JsonPayLoad["nPayLen"].asInt(); } } + return true; +} +/******************************************************************** +函数名称:ProtocolModule_Parse_Register +函数功能:解析用户信息 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_UserInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocolModule_Parse::ProtocolModule_Parse_Register(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_UserInfo)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE; + return false; + } + Json::Value st_JsonProtocol = st_JsonRoot["st_UserInfo"]; + if (!st_JsonProtocol["tszUserName"].isNull()) + { + _tcsxcpy(pSt_UserInfo->tszUserName, st_JsonProtocol["tszUserName"].asCString()); + } + if (!st_JsonProtocol["tszUserPass"].isNull()) + { + _tcsxcpy(pSt_UserInfo->tszUserPass, st_JsonProtocol["tszUserPass"].asCString()); + } + if (!st_JsonProtocol["tszEMailAddr"].isNull()) + { + _tcsxcpy(pSt_UserInfo->tszEMailAddr, st_JsonProtocol["tszEMailAddr"].asCString()); + } + if (!st_JsonProtocol["tszLoginTime"].isNull()) + { + _tcsxcpy(pSt_UserInfo->tszLoginTime, st_JsonProtocol["tszLoginTime"].asCString()); + } + if (!st_JsonProtocol["tszCreateTime"].isNull()) + { + _tcsxcpy(pSt_UserInfo->tszCreateTime, st_JsonProtocol["tszCreateTime"].asCString()); + } + if (!st_JsonProtocol["nPhoneNumber"].isNull()) + { + pSt_UserInfo->nPhoneNumber = st_JsonProtocol["nPhoneNumber"].asInt64(); + } + if (!st_JsonProtocol["nIDNumber"].isNull()) + { + pSt_UserInfo->nIDNumber = st_JsonProtocol["nIDNumber"].asInt64(); + } + if (!st_JsonProtocol["nUserLevel"].isNull()) + { + pSt_UserInfo->nUserLevel = st_JsonProtocol["nUserLevel"].asInt(); + } + if (!st_JsonProtocol["nUserState"].isNull()) + { + pSt_UserInfo->nUserState = st_JsonProtocol["nUserState"].asInt(); + } + return true; +} +/******************************************************************** +函数名称:ProtocolModule_Parse_Token +函数功能:解析TOKEN + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:输出解析到的TOKEN值 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocolModule_Parse::ProtocolModule_Parse_Token(LPCXSTR lpszMsgBuffer, int nMsgLen, XNETHANDLE* pxhToken) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer) || (NULL == pxhToken)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE; + return false; + } + if (st_JsonRoot["xhToken"].isNull()) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE; + return false; + } + *pxhToken = st_JsonRoot["xhToken"].asUInt64(); + return true; +} +/******************************************************************** +函数名称:ProtocolModule_Parse_Type +函数功能:解析负载的类型字段 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:要解析的大小 + 参数.三:pInt_Type + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出解析到的类型 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocolModule_Parse::ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_Type) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE; + return false; + } + Json::Value st_JsonObject = st_JsonRoot["Object"]; + if (!st_JsonObject["nType"].isNull()) + { + *pInt_Type = st_JsonObject["nType"].asInt(); + } + + return true; +} +/******************************************************************** +函数名称:ProtocolModule_Parse_Name +函数功能:解析负载的类型字段 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:要解析的大小 + 参数.三:ptszMSGBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析到的名称 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CProtocolModule_Parse::ProtocolModule_Parse_Name(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszMSGBuffer) +{ + Protocol_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT; + return false; + } + Json::Value st_JsonRoot; + JSONCPP_STRING st_JsonError; + Json::CharReaderBuilder st_ReaderBuilder; + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + Protocol_IsErrorOccur = true; + Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARSE; + return false; + } + Json::Value st_JsonObject = st_JsonRoot["Object"]; + if (!st_JsonObject["name"].isNull()) + { + _tcsxcpy(ptszMSGBuffer, st_JsonObject["name"].asCString()); + } + return true; } \ No newline at end of file diff --git a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h index 90bdb22..d503748 100644 --- a/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h +++ b/XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h @@ -18,6 +18,10 @@ class CProtocolModule_Parse ~CProtocolModule_Parse(); public: bool ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XCHAR* ptszMsgBuffer, int* pInt_MsgLen); + bool ProtocolModule_Parse_Register(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo); + bool ProtocolModule_Parse_Token(LPCXSTR lpszMsgBuffer, int nMsgLen, XNETHANDLE* pxhToken); + bool ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_Type); + bool ProtocolModule_Parse_Name(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszMSGBuffer); protected: private: }; diff --git a/XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h b/XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h index db79519..1bdc723 100644 --- a/XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h +++ b/XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h @@ -435,4 +435,100 @@ extern "C" bool ProtocolModule_Packet_UNReadDelete(XHANDLE xhToken, XCHAR* ptszM 意思:是否成功 备注: *********************************************************************/ -extern "C" bool ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr = NULL, XCHAR *ptszMsgBuffer = NULL, int* pInt_MsgLen = NULL); \ No newline at end of file +extern "C" bool ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr = NULL, XCHAR *ptszMsgBuffer = NULL, int* pInt_MsgLen = NULL); +/******************************************************************** +函数名称:ProtocolModule_Parse_Register +函数功能:解析用户信息 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pSt_UserInfo + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出解析的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ProtocolModule_Parse_Register(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo); +/******************************************************************** +函数名称:ProtocolModule_Parse_Token +函数功能:解析TOKEN + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要解析的缓冲区 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入要解析的大小 + 参数.三:pxhToken + In/Out:Out + 类型:句柄 + 可空:N + 意思:输出解析到的TOKEN值 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ProtocolModule_Parse_Token(LPCXSTR lpszMsgBuffer, int nMsgLen, XNETHANDLE* pxhToken); +/******************************************************************** +函数名称:ProtocolModule_Parse_Type +函数功能:解析负载的类型字段 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:要解析的大小 + 参数.三:pInt_Type + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出解析到的类型 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_Type); +/******************************************************************** +函数名称:ProtocolModule_Parse_Name +函数功能:解析负载的类型字段 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要解析的数据 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:要解析的大小 + 参数.三:ptszMSGBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:输出解析到的名称 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool ProtocolModule_Parse_Name(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszMSGBuffer); \ No newline at end of file diff --git a/XEngine_Source/MQCore_ProtocolModule/pch.cpp b/XEngine_Source/MQCore_ProtocolModule/pch.cpp index 07f7080..ee4b5f7 100644 --- a/XEngine_Source/MQCore_ProtocolModule/pch.cpp +++ b/XEngine_Source/MQCore_ProtocolModule/pch.cpp @@ -89,4 +89,20 @@ extern "C" bool ProtocolModule_Packet_UNReadDelete(XHANDLE xhToken, XCHAR * ptsz extern "C" bool ProtocolModule_Parse_Websocket(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, XCHAR *ptszMsgBuffer, int* pInt_MsgLen) { return m_ProtocolParse.ProtocolModule_Parse_Websocket(lpszMsgBuffer, nMsgLen, pSt_ProtocolHdr, ptszMsgBuffer, pInt_MsgLen); +} +extern "C" bool ProtocolModule_Parse_Register(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOL_USERINFO* pSt_UserInfo) +{ + return m_ProtocolParse.ProtocolModule_Parse_Register(lpszMsgBuffer, nMsgLen, pSt_UserInfo); +} +extern "C" bool ProtocolModule_Parse_Token(LPCXSTR lpszMsgBuffer, int nMsgLen, XNETHANDLE* pxhToken) +{ + return m_ProtocolParse.ProtocolModule_Parse_Token(lpszMsgBuffer, nMsgLen, pxhToken); +} +extern "C" bool ProtocolModule_Parse_Type(LPCXSTR lpszMsgBuffer, int nMsgLen, int* pInt_Type) +{ + return m_ProtocolParse.ProtocolModule_Parse_Type(lpszMsgBuffer, nMsgLen, pInt_Type); +} +extern "C" bool ProtocolModule_Parse_Name(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszMSGBuffer) +{ + return m_ProtocolParse.ProtocolModule_Parse_Name(lpszMsgBuffer, nMsgLen, ptszMSGBuffer); } \ No newline at end of file diff --git a/XEngine_Source/MQCore_SessionModule/Makefile b/XEngine_Source/MQCore_SessionModule/Makefile index afdd9b7..4001586 100644 --- a/XEngine_Source/MQCore_SessionModule/Makefile +++ b/XEngine_Source/MQCore_SessionModule/Makefile @@ -1,10 +1,6 @@ CC = g++ -Wall -std=c++20 -fPIC -PLATFORM = linux -PLATVER = -PLATDIR = FILEEXT = LIBFLAG = -RELEASE = 0 LOADHDR = -I ./ LOADSO = LIB = -lXEngine_BaseLib @@ -12,26 +8,29 @@ LIBEX = OBJECTS = SessionModule_Client.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) +override UNICODE := -D __UNICODE__ +else +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 @@ -40,7 +39,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 @@ -52,10 +50,10 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libMQCore_SessionModule.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) SessionModule_Client.o:./SessionModule_Client/SessionModule_Client.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./SessionModule_Client/SessionModule_Client.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./SessionModule_Client/SessionModule_Client.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index 41a88ae..653611d 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -5,6 +5,7 @@ FLAGS= #要编译的模块 BASE_THIRDPART_JSONCPP = ./XEngine_Depend/XEngine_Module/jsoncpp BASE_THIRDPART_REPORT = ./XEngine_Depend/XEngine_Module/XEngine_InfoReport +BASE_THIRDPART_TOKEN = ./XEngine_Depend/XEngine_Module/XEngine_Token BASE_CONFIG_PATH = ./MQCore_ConfigModule BASE_PROTOCOL_PATH = ./MQCore_ProtocolModule @@ -21,7 +22,7 @@ else ifeq ($(PLATFORM),mac) FILEEXT = dylib endif -XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ +XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so libXEngine_Token.so \ libMQCore_ConfigModule.so libMQCore_ProtocolModule.so libMQCore_SessionModule.so libMQCore_MemoryCache.so libMQCore_DBModule.so libMQCore_HelpModule.so \ XEngine_MQServiceApp.exe @@ -41,19 +42,25 @@ ifeq ($(FLAGS), InstallAll) else make -C $(BASE_THIRDPART_REPORT) PLATFORM=$(PLATFORM) $(FLAGS) endif +libXEngine_Token.so: +ifeq ($(FLAGS), InstallAll) + cp $(BASE_THIRDPART_TOKEN)/libXEngine_Token.$(FILEEXT) ../XEngine_Release/ +else + make -C $(BASE_THIRDPART_TOKEN) PLATFORM=$(PLATFORM) $(FLAGS) +endif libMQCore_ConfigModule.so: - make -C $(BASE_CONFIG_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_CONFIG_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libMQCore_ProtocolModule.so: - make -C $(BASE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libMQCore_SessionModule.so: - make -C $(BASE_SESSION_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_SESSION_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libMQCore_MemoryCache.so: - make -C $(BASE_MEMORYCACHE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_MEMORYCACHE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libMQCore_DBModule.so: - make -C $(BASE_DATABASE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_DATABASE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) libMQCore_HelpModule.so: - make -C $(BASE_HELP_PATH) PLATFORM=$(PLATFORM) $(FLAGS) + make -C $(BASE_HELP_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) XEngine_MQServiceApp.exe: - make -C $(APP_SERVICE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) \ No newline at end of file + make -C $(APP_SERVICE_PATH) PLATFORM=$(PLATFORM) UNICODE=$(UNICODE) RELEASE=$(RELEASE) $(FLAGS) \ No newline at end of file diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index fda9f7d..b9427ac 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit fda9f7d9140cc6a32eecb499e2acb67e8e1c7e6f +Subproject commit b9427ac1eb1183eb76ae73c61b2cf0fb27448aa4 diff --git a/XEngine_Source/XEngine_MQServiceApp.sln b/XEngine_Source/XEngine_MQServiceApp.sln index 0e0bd2a..389dc75 100644 --- a/XEngine_Source/XEngine_MQServiceApp.sln +++ b/XEngine_Source/XEngine_MQServiceApp.sln @@ -11,6 +11,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_MQServiceApp", "XEn {77321E0D-15DB-4C6E-8872-115CBBE41F27} = {77321E0D-15DB-4C6E-8872-115CBBE41F27} {8C55D3E0-FEC2-4A6C-A374-651516ED8F99} = {8C55D3E0-FEC2-4A6C-A374-651516ED8F99} {B0EB2A7A-53C1-4E9F-A851-19539099671C} = {B0EB2A7A-53C1-4E9F-A851-19539099671C} + {E17E889F-D826-413F-854E-DBA6000B4DA7} = {E17E889F-D826-413F-854E-DBA6000B4DA7} {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} EndProjectSection @@ -50,6 +51,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MQCore_MemoryCache", "MQCor EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MQCore_HelpModule", "MQCore_HelpModule\MQCore_HelpModule.vcxproj", "{4B061F8B-A783-45EA-A8D1-78F9668C49D2}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_Token", "XEngine_Depend\XEngine_Module\XEngine_Token\XEngine_Token.vcxproj", "{E17E889F-D826-413F-854E-DBA6000B4DA7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM64 = Debug|ARM64 @@ -168,6 +171,18 @@ Global {4B061F8B-A783-45EA-A8D1-78F9668C49D2}.Release|x64.Build.0 = Release|x64 {4B061F8B-A783-45EA-A8D1-78F9668C49D2}.Release|x86.ActiveCfg = Release|Win32 {4B061F8B-A783-45EA-A8D1-78F9668C49D2}.Release|x86.Build.0 = Release|Win32 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|ARM64.Build.0 = Debug|ARM64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|x64.ActiveCfg = Debug|x64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|x64.Build.0 = Debug|x64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|x86.ActiveCfg = Debug|Win32 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Debug|x86.Build.0 = Debug|Win32 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|ARM64.ActiveCfg = Release|ARM64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|ARM64.Build.0 = Release|ARM64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|x64.ActiveCfg = Release|x64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|x64.Build.0 = Release|x64 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|x86.ActiveCfg = Release|Win32 + {E17E889F-D826-413F-854E-DBA6000B4DA7}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -175,6 +190,7 @@ Global GlobalSection(NestedProjects) = preSolution {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {BAC91AAE-D438-4999-9541-EB8804B12F0C} {F6520D2C-BB8E-45BB-964B-F5D6A4318A89} = {BAC91AAE-D438-4999-9541-EB8804B12F0C} + {E17E889F-D826-413F-854E-DBA6000B4DA7} = {BAC91AAE-D438-4999-9541-EB8804B12F0C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EFADBBBD-43B1-4B9B-9DD8-04415EBEFDA7} diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.cpp new file mode 100644 index 0000000..36c02d2 --- /dev/null +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.cpp @@ -0,0 +1,103 @@ +#include "../MQService_Hdr.h" +/******************************************************************** +// Created: 2025/05/20 16:33:21 +// File Name: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask\MQService_HTTPGet.cpp +// File Path: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask +// File Base: MQService_HTTPGet +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: HTTP GET方法处理 +// History: +*********************************************************************/ +bool MessageQueue_HttpTask_Get(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, XCHAR*** pptszListHdr, int nUrlCount) +{ + int nSDLen = 0; + XCHAR tszSDBuffer[1024] = {}; + XCHAR tszKeyStr[MAX_PATH] = {}; + + LPCXSTR lpszAPILogin = _X("login"); + LPCXSTR lpszAPIUPDate = _X("update"); + LPCXSTR lpszAPIClose = _X("close"); + + if (0 == _tcsxnicmp(lpszAPILogin, lpszFuncName, _tcsxlen(lpszAPILogin))) + { + //http://app.xyry.org:5202/api?function=login&user=123123aa&pass=123123 + XNETHANDLE xhToken = 0; + XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; + + BaseLib_String_GetKeyValue((*pptszListHdr)[1], "=", tszKeyStr, st_UserInfo.tszUserName); + BaseLib_String_GetKeyValue((*pptszListHdr)[2], "=", tszKeyStr, st_UserInfo.tszUserPass); + + if (!DBModule_MQUser_UserQuery(&st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_NOTFOUND, "user or pass is incorrect"); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求本地验证失败,用户或者密码不正确,错误:%lX"), lpszClientAddr, SessionModule_GetLastError()); + return false; + } + //用户是否存在会话,存在就返回,并且更新TOKEN + if (Session_Token_GetUser(st_UserInfo.tszUserName, st_UserInfo.tszUserPass, &xhToken)) + { + XCHAR tszTokenStr[128] = {}; + _xstprintf(tszTokenStr, _X("%lld"), xhToken); + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, 0, tszTokenStr); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求登录发现会话已经存在,直接返回TOKEN:%lld 成功"), lpszClientAddr, xhToken); + return true; + } + //权限是否正确 + if (0 != st_UserInfo.nUserLevel) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "permission error"); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,登录失败,客户端权限不足够"), lpszClientAddr, st_UserInfo.tszUserName); + return false; + } + if (0 == xhToken) + { + BaseLib_Handle_Create(&xhToken); + } + Session_Token_Insert(xhToken, &st_UserInfo); + + XCHAR tszTokenStr[128] = {}; + _xstprintf(tszTokenStr, _X("%lld"), xhToken); + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, 0, tszTokenStr); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求登录获得TOKEN:%lld 成功,用户级别:%d"), lpszClientAddr, xhToken, st_UserInfo.nUserLevel); + } + else if (0 == _tcsxnicmp(lpszAPIUPDate, lpszFuncName, _tcsxlen(lpszAPIUPDate))) + { + //http://app.xyry.org:5202/api?function=update&token=1000112345 + XCHAR tszUserToken[128]; + memset(tszUserToken, '\0', sizeof(tszUserToken)); + + BaseLib_String_GetKeyValue((*pptszListHdr)[1], "=", tszKeyStr, tszUserToken); + + if (!Session_Token_UPDate(_ttxoll(tszUserToken))) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_NOTFOUND, "token not found"); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,更新TOKEN失败,不存在的Token:%s"), lpszClientAddr, tszUserToken); + return false; + } + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, 0, tszUserToken); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求更新TOKEN:%s 成功"), lpszClientAddr, tszUserToken); + } + else if (0 == _tcsxnicmp(lpszAPIClose, lpszFuncName, _tcsxlen(lpszAPIClose))) + { + //http://app.xyry.org:5202/api?function=close&token=1000112345 + XCHAR tszUserToken[128]; + memset(tszUserToken, '\0', sizeof(tszUserToken)); + + BaseLib_String_GetKeyValue((*pptszListHdr)[1], "=", tszKeyStr, tszUserToken); + //主动关闭 + Session_Token_Delete(_ttxoll(tszUserToken)); + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, 0, tszUserToken); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求关闭TOKEN:%s 成功"), lpszClientAddr, tszUserToken); + } + + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.h b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.h new file mode 100644 index 0000000..cff58c1 --- /dev/null +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPGet.h @@ -0,0 +1,13 @@ +#pragma once +/******************************************************************** +// Created: 2025/05/20 16:33:07 +// File Name: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask\MQService_HTTPGet.h +// File Path: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask +// File Base: MQService_HTTPGet +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: HTTP GET方法处理 +// History: +*********************************************************************/ +bool MessageQueue_HttpTask_Get(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, XCHAR*** pptszListHdr, int nUrlCount); \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp new file mode 100644 index 0000000..8b6cf3c --- /dev/null +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.cpp @@ -0,0 +1,235 @@ +#include "../MQService_Hdr.h" +/******************************************************************** +// Created: 2025/05/20 15:20:30 +// File Name: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask\MQService_HTTPPost.cpp +// File Path: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask +// File Base: MQService_HTTPPost +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: HTTP POST方法处理 +// History: +*********************************************************************/ +bool MessageQueue_HttpTask_Post(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, LPCXSTR lpszMsgBuffer, int nMsgLen) +{ + int nSDLen = 0; + XNETHANDLE xhToken = 0; + XCHAR tszSDBuffer[1024] = {}; + XCHAR tszKeyStr[MAX_PATH] = {}; + XCHAR tszVluStr[MAX_PATH] = {}; + LPCXSTR lpszAPIRegister = _X("register"); + LPCXSTR lpszAPIGetUser = _X("getuser"); + LPCXSTR lpszAPIGetTopic = _X("gettopic"); + LPCXSTR lpszAPIGetList = _X("getlist"); + LPCXSTR lpszAPIGetOnline = _X("getonline"); + LPCXSTR lpszAPICreateTopic = _X("createtopic"); + LPCXSTR lpszAPIDelTopic = _X("deletetopic"); + LPCXSTR lpszAPIDelUser = _X("deleteuser"); + + //判断是否需要验证,不是注册协议 + if (st_ServiceCfg.st_XAuthorize.bHTTPAuth && (0 != _tcsxnicmp(lpszAPIRegister, lpszFuncName, _tcsxlen(lpszAPIRegister)))) + { + if (ProtocolModule_Parse_Token(lpszMsgBuffer, nMsgLen, &xhToken)) + { + if (!Session_Token_Get(xhToken)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "not authorize"); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求的API:%s 失败,因为没有经过验证"), lpszClientAddr, lpszFuncName); + return false; + } + } + } + //判断请求 + if (0 == _tcsxnicmp(lpszAPIRegister, lpszFuncName, _tcsxlen(lpszAPIRegister))) + { + XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; + if (!ProtocolModule_Parse_Register(lpszMsgBuffer, nMsgLen, &st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_PARSE, _X("json load parse is failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求注册消息失败,负载内容错误:%s"), lpszClientAddr, lpszMsgBuffer); + return false; + } + if (DBModule_MQUser_UserQuery(&st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_EXISTED, _X("user is existed")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求用户注册失败,用户已经存在,错误:%lX"), lpszClientAddr, SessionModule_GetLastError()); + return false; + } + st_UserInfo.nUserLevel = ENUM_XENGINE_PROTOCOLHDR_LEVEL_TYPE_USER; + if (!DBModule_MQUser_UserInsert(&st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_SERVICE, _X("service is failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求用户注册失败,插入数据库失败,错误:%lX"), lpszClientAddr, SessionModule_GetLastError()); + return false; + } + //是否需要代理通知 + if (_tcsxlen(st_ServiceCfg.st_XPass.tszPassRegister) > 0) + { + int nHTTPCode = 0; + XCLIENT_APIHTTP st_HTTPParament; + memset(&st_HTTPParament, '\0', sizeof(XCLIENT_APIHTTP)); + + st_HTTPParament.nTimeConnect = 2; + ProtocolModule_Packet_PassUser(&st_UserInfo, tszSDBuffer, &nSDLen, XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERREG); + APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XPass.tszPassRegister, tszSDBuffer, &nHTTPCode, NULL, NULL, NULL, NULL, &st_HTTPParament); + if (200 != nHTTPCode) + { + DBModule_MQUser_UserDelete(&st_UserInfo); //删除 + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_APIREG, _X("service is failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求远程注册失败,HTTPCode:%d"), lpszClientAddr, nHTTPCode); + return false; + } + } + //是否需要订阅公用消息队列 + if (st_DBConfig.st_MQData.bCommSub) + { + XENGINE_DBUSERKEY st_Userkey; + memset(&st_Userkey, '\0', sizeof(XENGINE_DBUSERKEY)); + + _tcsxcpy(st_Userkey.tszUserName, st_UserInfo.tszUserName); + _tcsxcpy(st_Userkey.tszKeyName, st_ServiceCfg.tszTopic); + //创建 + if (!DBModule_MQUser_KeyInsert(&st_Userkey)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP消息端:%s,绑定消息队列主题失败,主题名称:%s,错误:%lX"), lpszClientAddr, st_Userkey.tszKeyName, DBModule_GetLastError()); + } + } + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求用户注册成功,用户名:%s,密码:%s"), lpszClientAddr, st_UserInfo.tszUserName, st_UserInfo.tszUserPass); + } + else if (0 == _tcsxnicmp(lpszAPIGetUser, lpszFuncName, _tcsxlen(lpszAPIGetUser))) + { + //用户 http://127.0.0.1:5202/api?function=getuser + int nListCount = 0; + XENGINE_PROTOCOL_USERINFO** ppSt_UserInfo; + DBModule_MQUser_UserList(&ppSt_UserInfo, &nListCount); + ProtocolModule_Packet_UserList(tszSDBuffer, &nSDLen, &ppSt_UserInfo, nListCount); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + BaseLib_Memory_Free((XPPPMEM)&ppSt_UserInfo, nListCount); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取用户列表请求成功,获取到的用户列表个数:%d"), lpszClientAddr, nListCount); + } + else if (0 == _tcsxnicmp(lpszAPIGetOnline, lpszFuncName, _tcsxlen(lpszAPIGetOnline))) + { + //获取在线用户 http://127.0.0.1:5202/api?function=getonline + int nType = 0; + int nListCount = 0; + XCHAR** pptszListAddr; + + ProtocolModule_Parse_Type(lpszMsgBuffer, nMsgLen, &nType); + SessionModule_Client_GetListAddr(&pptszListAddr, &nListCount, nType); + ProtocolModule_Packet_OnlineList(tszSDBuffer, &nSDLen, &pptszListAddr, nListCount); + BaseLib_Memory_Free((XPPPMEM)&pptszListAddr, nListCount); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + } + else if (0 == _tcsxnicmp(lpszAPIGetTopic, lpszFuncName, _tcsxlen(lpszAPIGetTopic))) + { + //主题 http://127.0.0.1:5202/api?function=gettopic + int nDBCount = 0; + XCHAR tszTopicName[MAX_PATH] = {}; + ProtocolModule_Parse_Name(lpszMsgBuffer, nMsgLen, tszTopicName); + DBModule_MQData_GetLeftCount(tszTopicName, 0, &nDBCount); + ProtocolModule_Packet_TopicName(tszSDBuffer, &nSDLen, tszTopicName, nDBCount); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + } + else if (0 == _tcsxnicmp(lpszAPIGetList, lpszFuncName, _tcsxlen(lpszAPIGetList))) + { + //主题 http://127.0.0.1:5202/api?function=getlist + int nListCount = 0; + XCHAR** ppszTableName; + DBModule_MQData_ShowTable(&ppszTableName, &nListCount); + ProtocolModule_Packet_TopicList(tszSDBuffer, &nSDLen, &ppszTableName, nListCount); + BaseLib_Memory_Free((XPPPMEM)&ppszTableName, nListCount); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取主题列表请求成功,获取到的主题列表个数:%d"), lpszClientAddr, nListCount); + } + else if (0 == _tcsxnicmp(lpszAPICreateTopic, lpszFuncName, _tcsxlen(lpszAPICreateTopic))) + { + //http://127.0.0.1:5202/api?function=createtopic + + XENGINE_PROTOCOL_XMQ st_MQProtocol = {}; + XENGINE_PROTOCOLHDR st_ProtocolHdr = {}; + + ProtocolModule_Parse_Name(lpszMsgBuffer, nMsgLen, st_MQProtocol.tszMQKey); + APIHelp_MQHelp_JsonToHex(&st_ProtocolHdr); + + st_ProtocolHdr.xhToken = xhToken; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQTOPICCREATE; + MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, (LPCXSTR)&st_MQProtocol, sizeof(XENGINE_PROTOCOL_XMQ), XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求主题删除成功,主题名:%s"), lpszClientAddr, st_MQProtocol.tszMQKey); + } + else if (0 == _tcsxnicmp(lpszAPIDelTopic, lpszFuncName, _tcsxlen(lpszAPIDelTopic))) + { + //http://127.0.0.1:5202/api?function=deletetopic + + XENGINE_PROTOCOL_XMQ st_MQProtocol = {}; + XENGINE_PROTOCOLHDR st_ProtocolHdr = {}; + + ProtocolModule_Parse_Name(lpszMsgBuffer, nMsgLen, st_MQProtocol.tszMQKey); + APIHelp_MQHelp_JsonToHex(&st_ProtocolHdr); + + st_ProtocolHdr.xhToken = xhToken; + st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQTOPICDELETE; + MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, (LPCXSTR)&st_MQProtocol, sizeof(XENGINE_PROTOCOL_XMQ), XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求主题删除成功,主题名:%s"), lpszClientAddr, st_MQProtocol.tszMQKey); + } + else if (0 == _tcsxnicmp(lpszAPIDelUser, lpszFuncName, _tcsxlen(lpszAPIDelUser))) + { + XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; + if (!ProtocolModule_Parse_Register(lpszMsgBuffer, nMsgLen, &st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_PARSE, _X("json load parse is failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求注册消息失败,负载内容错误:%s"), lpszClientAddr, lpszMsgBuffer); + return false; + } + if (!DBModule_MQUser_UserDelete(&st_UserInfo)) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_DELETE, _X("delete user failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求用户删除失败,删除数据库失败,错误:%lX"), lpszClientAddr, SessionModule_GetLastError()); + return false; + } + if (_tcsxlen(st_ServiceCfg.st_XPass.tszPassUNReg) > 0) + { + int nHTTPCode = 0; + XCLIENT_APIHTTP st_HTTPParament; + memset(&st_HTTPParament, '\0', sizeof(XCLIENT_APIHTTP)); + + st_HTTPParament.nTimeConnect = 2; + + ProtocolModule_Packet_PassUser(&st_UserInfo, tszSDBuffer, &nSDLen, XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERDEL); + APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XPass.tszPassUNReg, tszSDBuffer, &nHTTPCode, NULL, NULL, NULL, NULL, &st_HTTPParament); + if (200 != nHTTPCode) + { + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen, ERROR_XENGINE_MESSAGE_HTTP_APIDEL, _X("delete user failure")); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求远程注销失败,错误:%lX,HTTPCode:%d"), lpszClientAddr, nHTTPCode); + } + } + XENGINE_DBUSERKEY st_UserKey; + XENGINE_DBTOPICOWNER st_DBOwner; + + memset(&st_UserKey, '\0', sizeof(XENGINE_DBUSERKEY)); + memset(&st_DBOwner, '\0', sizeof(XENGINE_DBTOPICOWNER)); + + _tcsxcpy(st_UserKey.tszUserName, st_UserInfo.tszUserName); + _tcsxcpy(st_DBOwner.tszUserName, st_UserInfo.tszUserName); + + DBModule_MQUser_KeyDelete(&st_UserKey); + DBModule_MQUser_OwnerDelete(&st_DBOwner); + ProtocolModule_Packet_Http(tszSDBuffer, &nSDLen); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_MQAPP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求用户删除成功,用户名:%s"), lpszClientAddr, st_UserInfo.tszUserName); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,协议错误"), lpszClientAddr); + } + return true; +} \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.h b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.h new file mode 100644 index 0000000..ab175de --- /dev/null +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HTTPTask/MQService_HTTPPost.h @@ -0,0 +1,13 @@ +#pragma once +/******************************************************************** +// Created: 2025/05/20 15:18:46 +// File Name: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask\MQService_HTTPPost.h +// File Path: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_HTTPTask +// File Base: MQService_HTTPPost +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: HTTP POST方法处理 +// History: +*********************************************************************/ +bool MessageQueue_HttpTask_Post(LPCXSTR lpszClientAddr, LPCXSTR lpszFuncName, LPCXSTR lpszMsgBuffer, int nMsgLen); \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h b/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h index 5028709..f9f2269 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Hdr.h @@ -45,7 +45,8 @@ using namespace std; #include #include "../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Define.h" #include "../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Error.h" - +#include "../XEngine_Depend/XEngine_Module/XEngine_Token/Session_Define.h" +#include "../XEngine_Depend/XEngine_Module/XEngine_Token/Session_Error.h" #include "../XQueue_ProtocolHdr.h" #include "../MQCore_ConfigModule/Config_Define.h" #include "../MQCore_ConfigModule/Config_Error.h" @@ -59,6 +60,8 @@ using namespace std; #include "../MQCore_HelpModule/APIHelp_Error.h" #include "../MQCore_MemoryCache/MemoryCache_Define.h" #include "../MQCore_MemoryCache/MemoryCache_Error.h" +#include "MQService_HTTPTask/MQService_HTTPPost.h" +#include "MQService_HTTPTask/MQService_HTTPGet.h" extern bool bIsRun; extern bool bIsTest; @@ -76,10 +79,12 @@ extern XHANDLE xhTCPPool; extern XHANDLE xhHttpPool; extern XHANDLE xhWSPool; extern XHANDLE xhMQTTPool; +extern XHANDLE xhMemPool; extern XENGINE_SERVERCONFIG st_ServiceCfg; extern MESSAGEQUEUE_DBCONFIG st_DBConfig; +#include "MQService_MemoryPool.h" #include "MQService_Config.h" #include "MQService_Net.h" #include "MQService_TCPTask.h" @@ -108,6 +113,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../x64/Debug/MQCore_DBModule.lib") #pragma comment(lib,"../x64/Debug/MQCore_HelpModule.lib") #pragma comment(lib,"../x64/Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../x64/Debug/XEngine_Token.lib") #pragma comment(lib,"../x64/Debug/MQCore_MemoryCache.lib") #elif _M_ARM64 #pragma comment(lib,"../ARM64/Debug/MQCore_ConfigModule.lib") @@ -116,6 +122,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../ARM64/Debug/MQCore_DBModule.lib") #pragma comment(lib,"../ARM64/Debug/MQCore_HelpModule.lib") #pragma comment(lib,"../ARM64/Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../ARM64/Debug/XEngine_Token.lib") #pragma comment(lib,"../ARM64/Debug/MQCore_MemoryCache.lib") #elif _M_IX86 #pragma comment(lib,"../Debug/MQCore_ConfigModule.lib") @@ -124,6 +131,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../Debug/MQCore_DBModule.lib") #pragma comment(lib,"../Debug/MQCore_HelpModule.lib") #pragma comment(lib,"../Debug/XEngine_InfoReport.lib") +#pragma comment(lib,"../Debug/XEngine_Token.lib") #pragma comment(lib,"../Debug/MQCore_MemoryCache.lib") #endif #else @@ -134,6 +142,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../x64/Release/MQCore_DBModule.lib") #pragma comment(lib,"../x64/Release/MQCore_HelpModule.lib") #pragma comment(lib,"../x64/Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../x64/Release/XEngine_Token.lib") #pragma comment(lib,"../x64/Release/MQCore_MemoryCache.lib") #elif _M_ARM64 #pragma comment(lib,"../ARM64/Release/MQCore_ConfigModule.lib") @@ -142,6 +151,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../ARM64/Release/MQCore_DBModule.lib") #pragma comment(lib,"../ARM64/Release/MQCore_HelpModule.lib") #pragma comment(lib,"../ARM64/Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../ARM64/Release/XEngine_Token.lib") #pragma comment(lib,"../ARM64/Release/MQCore_MemoryCache.lib") #elif _M_IX86 #pragma comment(lib,"../Release/MQCore_ConfigModule.lib") @@ -150,6 +160,7 @@ extern MESSAGEQUEUE_DBCONFIG st_DBConfig; #pragma comment(lib,"../Release/MQCore_DBModule.lib") #pragma comment(lib,"../Release/MQCore_HelpModule.lib") #pragma comment(lib,"../Release/XEngine_InfoReport.lib") +#pragma comment(lib,"../Release/XEngine_Token.lib") #pragma comment(lib,"../Release/MQCore_MemoryCache.lib") #endif #endif diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp index 8e0d9ca..7d43b8f 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp @@ -41,21 +41,12 @@ XHTHREAD CALLBACK MessageQueue_HttpThread(XPVOID lParam) bool MessageQueue_Http_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR** pptszListHdr, int nHdrCount) { int nPKTLen = 4096; - XCHAR tszPKTBuffer[4096]; - XCHAR tszKey[MAX_PATH]; - XCHAR tszValue[MAX_PATH]; - - memset(tszKey, '\0', MAX_PATH); - memset(tszValue, '\0', MAX_PATH); - memset(tszPKTBuffer, '\0', sizeof(tszPKTBuffer)); + XCHAR tszPKTBuffer[4096] = {}; + XCHAR tszKey[MAX_PATH] = {}; + XCHAR tszValue[MAX_PATH] = {}; LPCXSTR lpszPostMethod = _X("POST"); LPCXSTR lpszGetMethod = _X("GET"); - LPCXSTR lpszAPIGet = _X("get"); - LPCXSTR lpszAPIUser = _X("user"); - LPCXSTR lpszAPITopic = _X("topic"); - LPCXSTR lpszAPIOnline = _X("online"); - LPCXSTR lpszAPIDelete = _X("delete"); int nUrlCount = 0; XCHAR** ppSt_ListUrl; @@ -67,162 +58,16 @@ bool MessageQueue_Http_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,参数错误:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); return false; } - int nMethodPos = 0; - //判断是否需要验证 - if (st_ServiceCfg.st_XAuthorize.bHTTPAuth) - { - //http://127.0.0.1:5202/api?function=user&auth=XENGINE_MQPasskey - BaseLib_String_GetKeyValue(ppSt_ListUrl[1], _X("="), tszKey, tszValue); - if (_tcsxlen(st_ServiceCfg.st_XAuthorize.tszHTTPPass) > 0) - { - int nHTTPCode = 0; - ProtocolModule_Packet_PassHttp(tszPKTBuffer, &nPKTLen, pptszListHdr[1], pptszListHdr[0], pSt_HTTPParam->tszHttpMethod); - APIClient_Http_Request("POST", st_ServiceCfg.st_XAuthorize.tszHTTPPass, tszPKTBuffer, &nHTTPCode); - if (200 != nHTTPCode) - { - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "auth key is incorrent"); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,验证失败:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); - return false; - } - } - else - { - if (0 != _tcsxncmp(st_ServiceCfg.st_XAuthorize.tszToken, tszValue, _tcsxlen(st_ServiceCfg.st_XAuthorize.tszToken))) - { - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "auth key is incorrent"); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,验证失败:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri); - return false; - } - } - nMethodPos++; - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求HTTP管理接口验证成功,验证TOKEN:%s"), lpszClientAddr, ppSt_ListUrl[1]); - } //判断请求 if (0 == _tcsxnicmp(lpszPostMethod, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszPostMethod))) { - + BaseLib_String_GetKeyValue(ppSt_ListUrl[0], _X("="), tszKey, tszValue); + MessageQueue_HttpTask_Post(lpszClientAddr, tszValue, lpszMsgBuffer, nMsgLen); } else if (0 == _tcsxnicmp(lpszGetMethod, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszGetMethod))) { - //获取函数 - memset(tszValue, '\0', MAX_PATH); BaseLib_String_GetKeyValue(ppSt_ListUrl[0], _X("="), tszKey, tszValue); - if (0 == _tcsxnicmp(lpszAPIUser, tszValue, _tcsxlen(lpszAPIUser))) - { - //用户 http://127.0.0.1:5202/api?function=user - int nListCount = 0; - XENGINE_PROTOCOL_USERINFO** ppSt_UserInfo; - DBModule_MQUser_UserList(&ppSt_UserInfo, &nListCount); - ProtocolModule_Packet_UserList(tszPKTBuffer, &nPKTLen, &ppSt_UserInfo, nListCount); - BaseLib_Memory_Free((XPPPMEM)&ppSt_UserInfo, nListCount); - - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取用户列表请求成功,获取到的用户列表个数:%d"), lpszClientAddr, nListCount); - } - else if (0 == _tcsxnicmp(lpszAPIOnline, tszValue, _tcsxlen(lpszAPIOnline))) - { - //获取在线用户 http://127.0.0.1:5202/api?function=online&type=0 - int nListCount = 0; - XCHAR** pptszListAddr; - - BaseLib_String_GetKeyValue(ppSt_ListUrl[nMethodPos + 1], _X("="), tszKey, tszValue); - SessionModule_Client_GetListAddr(&pptszListAddr, &nListCount, _ttxoi(tszValue)); - ProtocolModule_Packet_OnlineList(tszPKTBuffer, &nPKTLen, &pptszListAddr, nListCount); - BaseLib_Memory_Free((XPPPMEM)&pptszListAddr, nListCount); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取在线用户列表请求成功,获取到的列表个数:%d"), lpszClientAddr, nListCount); - } - else if (0 == _tcsxnicmp(lpszAPITopic, tszValue, _tcsxlen(lpszAPITopic))) - { - //主题 http://127.0.0.1:5202/api?function=topic&name=comm - if (2 == nUrlCount) - { - int nListCount = 0; - XCHAR** ppszTableName; - DBModule_MQData_ShowTable(&ppszTableName, &nListCount); - ProtocolModule_Packet_TopicList(tszPKTBuffer, &nPKTLen, &ppszTableName, nListCount); - BaseLib_Memory_Free((XPPPMEM)&ppszTableName, nListCount); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取主题列表请求成功,获取到的主题列表个数:%d"), lpszClientAddr, nListCount); - } - else - { - int nDBCount = 0; - BaseLib_String_GetKeyValue(ppSt_ListUrl[nMethodPos + 1], _X("="), tszKey, tszValue); - DBModule_MQData_GetLeftCount(tszValue, 0, &nDBCount); - ProtocolModule_Packet_TopicName(tszPKTBuffer, &nPKTLen, tszValue, nDBCount); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,发送的获取主题列表请求成功,获取到的主题消息个数:%d"), lpszClientAddr, nDBCount); - } - } - else if (0 == _tcsxnicmp(lpszAPIDelete, tszValue, _tcsxlen(lpszAPIDelete))) - { - //http://127.0.0.1:5202/api?function=delete&type=0&name=comm - - memset(tszValue, '\0', MAX_PATH); - BaseLib_String_GetKeyValue(ppSt_ListUrl[nMethodPos + 2], _X("="), tszKey, tszValue); - if (0 == _ttxoi(tszValue)) - { - //type = 0 删除主题 - memset(tszValue, '\0', MAX_PATH); - BaseLib_String_GetKeyValue(ppSt_ListUrl[nMethodPos + 3], _X("="), tszKey, tszValue); - - XENGINE_DBTOPICOWNER st_DBOwner = {}; - XENGINE_DBUSERKEY st_UserKey = {}; - XENGINE_DBTIMERELEASE st_DBInfo = {}; - - _tcsxcpy(st_DBOwner.tszQueueName, tszValue); - _tcsxcpy(st_UserKey.tszKeyName, tszValue); - _tcsxcpy(st_DBInfo.tszQueueName, tszValue); - if (!DBModule_MQUser_OwnerDelete(&st_DBOwner)) - { - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_NOTFOUND, "topic name not found"); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP删除主题失败,主题不存在:%s"), lpszClientAddr, tszValue); - return false; - } - //清楚数据库 - APIHelp_Counter_SerialDel(tszValue); - DBModule_MQData_DeleteTable(tszValue); - DBModule_MQUser_KeyDelete(&st_UserKey); - DBModule_MQUser_TimeDelete(&st_DBInfo); - - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求主题删除成功,主题名:%s"), lpszClientAddr, tszValue); - } - else - { - // 删除用户 - memset(tszValue, '\0', MAX_PATH); - BaseLib_String_GetKeyValue(ppSt_ListUrl[nMethodPos + 3], _X("="), tszKey, tszValue); - - XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; - XENGINE_DBUSERKEY st_UserKey = {}; - XENGINE_DBTOPICOWNER st_DBOwner = {}; - - _tcsxcpy(st_UserInfo.tszUserName, tszValue); - _tcsxcpy(st_UserKey.tszUserName, tszValue); - _tcsxcpy(st_DBOwner.tszUserName, tszValue); - - if (!DBModule_MQUser_UserQuery(&st_UserInfo)) - { - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_NOTFOUND, "user name not found"); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP删除用户失败,用户不存在:%s"), lpszClientAddr, st_UserInfo.tszUserName); - return false; - } - DBModule_MQUser_UserDelete(&st_UserInfo); - DBModule_MQUser_KeyDelete(&st_UserKey); - DBModule_MQUser_OwnerDelete(&st_DBOwner); - - ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen); - XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求用户删除成功,用户名:%s"), lpszClientAddr, st_UserInfo.tszUserName); - } - } + MessageQueue_HttpTask_Get(lpszClientAddr, tszValue, &ppSt_ListUrl, nUrlCount); } else { diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_MemoryPool.h b/XEngine_Source/XEngine_MQServiceApp/MQService_MemoryPool.h new file mode 100644 index 0000000..0a1bc41 --- /dev/null +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_MemoryPool.h @@ -0,0 +1,44 @@ +#pragma once +/******************************************************************** +// Created: 2025/05/24 10:55:24 +// File Name: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp\MQService_MemoryPool.h +// File Path: D:\XEngine_MQService\XEngine_Source\XEngine_MQServiceApp +// File Base: MQService_MemoryPool +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 内存池封装 +// History: +*********************************************************************/ +class CMQService_MemoryPool +{ +public: + CMQService_MemoryPool(size_t nSize) + { + lPtr = ManagePool_Memory_Alloc(xhMemPool, nSize); + if (NULL == lPtr) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ALERT, _X("内存池分配失败,系统面临崩溃!")); + return; + } + } + ~CMQService_MemoryPool() + { + if (NULL != lPtr) + { + ManagePool_Memory_Free(xhMemPool, lPtr); + } + } +public: + // 支持类型转换 + template + T* as() { + return static_cast(lPtr); + } + XCHAR* get() + { + return static_cast(lPtr); + } +private: + XPVOID lPtr = NULL; +}; \ No newline at end of file diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp index a788ed4..ce31543 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp @@ -177,19 +177,16 @@ bool XEngine_MQXService_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int } else if (XENGINE_MQAPP_NETTYPE_HTTP == nIPProto) { - int nPKTLen = 8196; - XCHAR tszPKTBuffer[8196]; - RFCCOMPONENTS_HTTP_HDRPARAM st_HTTPHdr; - - memset(tszPKTBuffer, '\0', sizeof(tszPKTBuffer)); - memset(&st_HTTPHdr, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM)); + CMQService_MemoryPool m_MQMemoryPool(XENGINE_MEMORY_SIZE_MAX); + int nSDLen = XENGINE_MEMORY_SIZE_MAX; + RFCCOMPONENTS_HTTP_HDRPARAM st_HTTPHdr = {}; st_HTTPHdr.nHttpCode = 200; st_HTTPHdr.bIsClose = true; _tcsxcpy(st_HTTPHdr.tszMimeType, _X("json")); - HttpProtocol_Server_SendMsgEx(xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HTTPHdr, lpszMsgBuffer, nMsgLen); - if (!NetCore_TCPXCore_SendEx(xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen)) + HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MQMemoryPool.get(), &nSDLen, &st_HTTPHdr, lpszMsgBuffer, nMsgLen); + if (!NetCore_TCPXCore_SendEx(xhHTTPSocket, lpszClientAddr, m_MQMemoryPool.get(), nSDLen)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("发送数据给HTTP客户端:%s,失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); return false; @@ -197,11 +194,9 @@ bool XEngine_MQXService_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int } else if (XENGINE_MQAPP_NETTYPE_WEBSOCKET == nIPProto) { - XCHAR tszPKTBuffer[8196]; - memset(tszPKTBuffer, '\0', sizeof(tszPKTBuffer)); - - RfcComponents_WSCodec_EncodeMsg(lpszMsgBuffer, tszPKTBuffer, &nMsgLen, ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT); - if (!NetCore_TCPXCore_SendEx(xhWSSocket, lpszClientAddr, tszPKTBuffer, nMsgLen)) + CMQService_MemoryPool m_MQMemoryPool(XENGINE_MEMORY_SIZE_MAX); + RfcComponents_WSCodec_EncodeMsg(lpszMsgBuffer, m_MQMemoryPool.get(), &nMsgLen, ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT); + if (!NetCore_TCPXCore_SendEx(xhWSSocket, lpszClientAddr, m_MQMemoryPool.get(), nMsgLen)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("发送数据给Websocket客户端:%s,失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); return false; diff --git a/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp b/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp index 465a86f..b0d53ce 100644 --- a/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp @@ -49,6 +49,10 @@ bool MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCXSTR lpszC { lpszClientType = _X("WEBSOCKET"); } + else if (XENGINE_MQAPP_NETTYPE_HTTP == nNetType) + { + lpszClientType = _X("HTTP"); + } else { lpszClientType = _X("MQTT"); @@ -190,149 +194,30 @@ bool MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCXSTR lpszC SessionModule_Client_Delete(lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("%s客户端:%s,用户登出成功,用户名:%s"), lpszClientType, lpszClientAddr, tszUserName); } - else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERREG == pSt_ProtocolHdr->unOperatorCode) + } + else if (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_XMQ == pSt_ProtocolHdr->unOperatorType) + { + XCHAR tszUserName[MAX_PATH] = {}; + XENGINE_PROTOCOL_XMQ st_MQProtocol = {}; + //根据协议处理 + if (XENGINE_MQAPP_NETTYPE_HTTP == nNetType) { - XENGINE_PROTOCOL_USERINFO st_UserInfo; - memset(&st_UserInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO)); - - memcpy(&st_UserInfo, lpszMsgBuffer, sizeof(XENGINE_PROTOCOL_USERINFO)); - pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REPUSERREG; - //是否需要代理处理 - if (_tcsxlen(st_ServiceCfg.st_XPass.tszPassRegister) > 0) - { - int nHTTPCode = 0; - XCLIENT_APIHTTP st_HTTPParament; - memset(&st_HTTPParament, '\0', sizeof(XCLIENT_APIHTTP)); - - st_HTTPParament.nTimeConnect = 2; - ProtocolModule_Packet_PassUser(&st_UserInfo, tszSDBuffer, &nSDLen, XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERREG); - APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XPass.tszPassRegister, tszSDBuffer, &nHTTPCode, NULL, NULL, NULL, NULL, &st_HTTPParament); - if (200 != nHTTPCode) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_APIREG; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求远程注册失败,HTTPCode:%d"), lpszClientType, lpszClientAddr, nHTTPCode); - return false; - } - } - else - { - if (_tcsxlen(st_UserInfo.tszUserPass) <= 0) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_USERPASS; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求本地验证失败,密码为空"), lpszClientType, lpszClientAddr); - return false; - } - if (DBModule_MQUser_UserQuery(&st_UserInfo)) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_EXISTED; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求用户注册失败,用户已经存在,错误:%lX"), lpszClientType, lpszClientAddr, SessionModule_GetLastError()); - return false; - } - if (!DBModule_MQUser_UserInsert(&st_UserInfo)) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_REGISTER; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求用户注册失败,插入数据库失败,错误:%lX"), lpszClientType, lpszClientAddr, SessionModule_GetLastError()); - return false; - } - } - //是否需要订阅公用消息队列 - if (st_DBConfig.st_MQData.bCommSub) - { - XENGINE_DBUSERKEY st_Userkey; - memset(&st_Userkey, '\0', sizeof(XENGINE_DBUSERKEY)); - - _tcsxcpy(st_Userkey.tszUserName, st_UserInfo.tszUserName); - _tcsxcpy(st_Userkey.tszKeyName, st_ServiceCfg.tszTopic); - //创建 - if (!DBModule_MQUser_KeyInsert(&st_Userkey)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("%s消息端:%s,绑定消息队列主题失败,主题名称:%s,错误:%lX"), lpszClientType, lpszClientAddr, st_Userkey.tszKeyName, DBModule_GetLastError()); - } - } - pSt_ProtocolHdr->wReserve = 0; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("%s客户端:%s,请求用户注册成功,用户名:%s,密码:%s"), lpszClientType, lpszClientAddr, st_UserInfo.tszUserName, st_UserInfo.tszUserPass); + XENGINE_PROTOCOL_USERINFO st_UserInfo = {}; + Session_Token_Get(pSt_ProtocolHdr->xhToken, &st_UserInfo); + _tcsxcpy(tszUserName, st_UserInfo.tszUserName); } - else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERDEL == pSt_ProtocolHdr->unOperatorCode) + else { - XENGINE_PROTOCOL_USERINFO st_UserInfo; - memset(&st_UserInfo, '\0', sizeof(XENGINE_PROTOCOL_USERINFO)); - - memcpy(&st_UserInfo, lpszMsgBuffer, sizeof(XENGINE_PROTOCOL_USERINFO)); - pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REPUSERDEL; - - if (_tcsxlen(st_ServiceCfg.st_XPass.tszPassUNReg) > 0) - { - int nHTTPCode = 0; - XCLIENT_APIHTTP st_HTTPParament; - memset(&st_HTTPParament, '\0', sizeof(XCLIENT_APIHTTP)); - - st_HTTPParament.nTimeConnect = 2; - - ProtocolModule_Packet_PassUser(&st_UserInfo, tszSDBuffer, &nSDLen, XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERDEL); - APIClient_Http_Request(_X("POST"), st_ServiceCfg.st_XPass.tszPassUNReg, tszSDBuffer, &nHTTPCode, NULL, NULL, NULL, NULL, &st_HTTPParament); - if (200 != nHTTPCode) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_APIDEL; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求远程注销失败,错误:%lX,HTTPCode:%d"), lpszClientType, lpszClientAddr, nHTTPCode); - return false; - } - } - else + if (!SessionModule_Client_GetUser(lpszClientAddr, tszUserName)) { - if (!DBModule_MQUser_UserDelete(&st_UserInfo)) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_DELETE; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求用户删除失败,删除数据库失败,错误:%lX"), lpszClientType, lpszClientAddr, SessionModule_GetLastError()); - return false; - } + pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_NOTLOGIN; + ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, &st_MQProtocol, tszSDBuffer, &nSDLen); + XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求失败,用户没有通过验证"), lpszClientType, lpszClientAddr); + return false; } - pSt_ProtocolHdr->wReserve = 0; - XENGINE_DBUSERKEY st_UserKey; - XENGINE_DBTOPICOWNER st_DBOwner; - - memset(&st_UserKey, '\0', sizeof(XENGINE_DBUSERKEY)); - memset(&st_DBOwner, '\0', sizeof(XENGINE_DBTOPICOWNER)); - - _tcsxcpy(st_UserKey.tszUserName, st_UserInfo.tszUserName); - _tcsxcpy(st_DBOwner.tszUserName, st_UserInfo.tszUserName); - - DBModule_MQUser_KeyDelete(&st_UserKey); - DBModule_MQUser_OwnerDelete(&st_DBOwner); - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, NULL, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("%s客户端:%s,请求用户删除成功,用户名:%s"), lpszClientType, lpszClientAddr, st_UserInfo.tszUserName); } - } - else if (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_XMQ == pSt_ProtocolHdr->unOperatorType) - { - XENGINE_PROTOCOL_XMQ st_MQProtocol; - XCHAR tszUserName[MAX_PATH]; - - memset(&st_MQProtocol, '\0', sizeof(XENGINE_PROTOCOL_XMQ)); - memset(tszUserName, '\0', MAX_PATH); - if (!SessionModule_Client_GetUser(lpszClientAddr, tszUserName)) - { - pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_AUTH_NOTLOGIN; - ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, &st_MQProtocol, tszSDBuffer, &nSDLen); - XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s客户端:%s,请求失败,用户没有通过验证"), lpszClientType, lpszClientAddr); - return false; - } if (nMsgLen >= (int)sizeof(XENGINE_PROTOCOL_XMQ)) { memcpy(&st_MQProtocol, lpszMsgBuffer, sizeof(XENGINE_PROTOCOL_XMQ)); @@ -685,7 +570,7 @@ bool MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCXSTR lpszC pSt_ProtocolHdr->wReserve = ERROR_XENGINE_MESSAGE_XMQ_SERIAL; ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, &st_MQProtocol, tszSDBuffer, &nSDLen); XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s消息端:%s,主题:%s,获取消息数据失败,获取指定消息序列:%lld 失败,错误:%lX"), lpszClientType, lpszClientAddr, st_MQProtocol.tszMQKey, st_MQProtocol.nSerial, DBModule_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s消息端:%s,主题:%s,删除消息数据失败,删除指定消息序列:%lld 失败,错误:%lX"), lpszClientType, lpszClientAddr, st_MQProtocol.tszMQKey, st_MQProtocol.nSerial, DBModule_GetLastError()); return false; } st_MessageQueue.nQueueSerial = st_MQProtocol.nSerial; @@ -716,10 +601,12 @@ bool MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCXSTR lpszC ProtocolModule_Packet_Common(nNetType, pSt_ProtocolHdr, &st_MQProtocol, tszSDBuffer, &nSDLen); XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); } + BaseLib_Memory_Free((XPPPMEM)&ppszTableName, nListCount); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("%s消息端:%s,创建主题失败,主题名称:%s,主题存在,无法继续"), lpszClientType, lpszClientAddr, st_MQProtocol.tszMQKey); return false; } } + BaseLib_Memory_Free((XPPPMEM)&ppszTableName, nListCount); //创建表 if (!DBModule_MQData_CreateTable(st_MQProtocol.tszMQKey)) { diff --git a/XEngine_Source/XEngine_MQServiceApp/Makefile b/XEngine_Source/XEngine_MQServiceApp/Makefile index 62bd490..67f1521 100644 --- a/XEngine_Source/XEngine_MQServiceApp/Makefile +++ b/XEngine_Source/XEngine_MQServiceApp/Makefile @@ -1,44 +1,44 @@ CC = g++ -Wall -std=c++20 -PLATFORM = linux PLATVER = -PLATDIR = -RELEASE = 0 LOADHDR = -I ./ LOADSO = -L ../MQCore_ConfigModule -L ../MQCore_ProtocolModule -L ../MQCore_SessionModule -L ../MQCore_MemoryCache -L ../MQCore_DBModule -L ../MQCore_HelpModule \ - -L ../XEngine_Depend/XEngine_Module/jsoncpp -L ../XEngine_Depend/XEngine_Module/XEngine_InfoReport + -L ../XEngine_Depend/XEngine_Module/jsoncpp -L ../XEngine_Depend/XEngine_Module/XEngine_InfoReport -L ../XEngine_Depend/XEngine_Module/XEngine_Token LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXClient_APIHelp -lXEngine_SystemApi -lHelpComponents_XLog -lHelpComponents_Packets -lRfcComponents_WSProtocol -lRfcComponents_HttpProtocol -lRfcComponents_MQTTProtocol \ - -lMQCore_ConfigModule -lMQCore_ProtocolModule -lMQCore_SessionModule -lMQCore_MemoryCache -lMQCore_DBModule -lMQCore_HelpModule\ - -ljsoncpp -lXEngine_InfoReport + -lMQCore_ConfigModule -lMQCore_ProtocolModule -lMQCore_SessionModule -lMQCore_MemoryCache -lMQCore_DBModule -lMQCore_HelpModule \ + -ljsoncpp -lXEngine_InfoReport -lXEngine_Token LIBEX = -OBJECTS = MQService_Net.o MQService_Config.o MQService_TCPTask.o MQService_HttpTask.o MQService_WSTask.o MQService_Task.o MQService_MQTTTask.o XEngine_MQServiceApp.o +OBJECTS = MQService_Net.o MQService_Config.o MQService_TCPTask.o MQService_HttpTask.o MQService_WSTask.o MQService_Task.o MQService_MQTTTask.o MQService_HTTPPost.o MQService_HTTPGet.o XEngine_MQServiceApp.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) +override UNICODE := -D __UNICODE__ +else +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 LIBEX = -lpthread -lrt -ldl LOADBIN = -Wl,-rpath=./,--disable-new-dtags else ifeq ($(PLATFORM),mac) CC += -Wno-deprecated-declarations PLATVER = -D __MACOS__ - PLATDIR = XEngine_Mac LIBEX = -lpthread -ldl LOADBIN = -Wl,-rpath,@loader_path/./ endif @@ -47,22 +47,27 @@ all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o XEngine_MQServiceApp $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) MQService_Net.o:./MQService_Net.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_Net.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_Net.cpp MQService_Config.o:./MQService_Config.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_Config.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_Config.cpp MQService_TCPTask.o:./MQService_TCPTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_TCPTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_TCPTask.cpp MQService_HttpTask.o:./MQService_HttpTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_HttpTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_HttpTask.cpp MQService_WSTask.o:./MQService_WSTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_WSTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_WSTask.cpp MQService_Task.o:./MQService_Task.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_Task.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_Task.cpp MQService_MQTTTask.o:./MQService_MQTTTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MQService_MQTTTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_MQTTTask.cpp + +MQService_HTTPPost.o:./MQService_HTTPTask/MQService_HTTPPost.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_HTTPTask/MQService_HTTPPost.cpp +MQService_HTTPGet.o:./MQService_HTTPTask/MQService_HTTPGet.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./MQService_HTTPTask/MQService_HTTPGet.cpp XEngine_MQServiceApp.o:./XEngine_MQServiceApp.cpp - $(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./XEngine_MQServiceApp.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_MQServiceApp.cpp InstallAll:InstallApp diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp index e5dcd2a..25a8e72 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.cpp @@ -16,6 +16,7 @@ XHANDLE xhTCPPool = NULL; XHANDLE xhHttpPool = NULL; XHANDLE xhWSPool = NULL; XHANDLE xhMQTTPool = NULL; +XHANDLE xhMemPool = NULL; XENGINE_SERVERCONFIG st_ServiceCfg; MESSAGEQUEUE_DBCONFIG st_DBConfig; @@ -41,6 +42,7 @@ void ServiceApp_Stop(int signo) ManagePool_Thread_NQDestroy(xhHttpPool); ManagePool_Thread_NQDestroy(xhWSPool); ManagePool_Thread_NQDestroy(xhMQTTPool); + ManagePool_Memory_Destory(xhMemPool); DBModule_MQData_Destory(); DBModule_MQUser_Destory(); @@ -151,7 +153,7 @@ int main(int argc, char** argv) if (NULL == xhLog) { printf("启动服务器失败,启动日志失败,错误:%lX", XLog_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } HelpComponents_XLog_SetLogPriority(xhLog, st_ServiceCfg.st_XLog.nLogLeave); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化日志系统成功")); @@ -159,7 +161,7 @@ int main(int argc, char** argv) if (!Config_Json_DBFile(lpszDBConfig, &st_DBConfig)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化数据库配置失败,错误:%lX"), Config_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化数据库配置成功")); @@ -174,12 +176,20 @@ int main(int argc, char** argv) signal(SIGABRT, ServiceApp_Stop); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化服务器信号管理成功")); + xhMemPool = ManagePool_Memory_Create(); + if (NULL == xhMemPool) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化内存池失败,错误:%lX"), ManagePool_GetLastError()); + goto XENGINE_APPEXIST; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化内存池成功")); + if (st_ServiceCfg.st_XMemory.bDataQueryEnable || st_ServiceCfg.st_XMemory.bDataInsertEnable) { if (!MemoryCache_DBData_Init(st_ServiceCfg.st_XMemory.nTimeLast, st_ServiceCfg.st_XMemory.nTimeCount, MessageQueue_CBTask_MemoryCache)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化消息内容高速缓存服务失败,错误:%lX"), MemoryCache_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化消息内容高速缓存服务成功,更新最大时间:%d,存储最大时间:%d"), st_ServiceCfg.st_XMemory.nTimeLast, st_ServiceCfg.st_XMemory.nTimeCount); } @@ -192,7 +202,7 @@ int main(int argc, char** argv) if (!MemoryCache_DBUser_Init(st_ServiceCfg.st_XMemory.nTimeLast, st_ServiceCfg.st_XMemory.nTimeCount, MessageQueue_CBTask_MemoryCache)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化用户信息高速缓存服务失败,错误:%lX"), MemoryCache_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化用户信息高速缓存服务成功,更新最大时间:%d,存储最大时间:%d"), st_ServiceCfg.st_XMemory.nTimeLast, st_ServiceCfg.st_XMemory.nTimeCount); } @@ -206,12 +216,12 @@ int main(int argc, char** argv) if (!DBModule_MQData_Init((DATABASE_MYSQL_CONNECTINFO*)&st_ServiceCfg.st_XSql, st_ServiceCfg.st_XMemory.bDataQueryEnable, st_ServiceCfg.st_XMemory.bDataInsertEnable)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化消息数据数据库失败,错误:%lX"), DBModule_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } if (!DBModule_MQUser_Init((DATABASE_MYSQL_CONNECTINFO*)&st_ServiceCfg.st_XSql, st_ServiceCfg.st_XMemory.bUserQueryEnable, MessageQueue_CBTask_TimePublish)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化消息用户数据库失败,错误:%lX"), DBModule_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化数据库服务成功")); } @@ -219,7 +229,7 @@ int main(int argc, char** argv) if (!SessionModule_Client_Init()) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("初始化客户端会话管理器失败,错误:%lX"), SessionModule_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化客户端会话管理器成功")); //TCP消息服务 @@ -230,7 +240,7 @@ int main(int argc, char** argv) if (NULL == xhTCPPacket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("初始化TCP组包器失败,错误:%lX"), Packets_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动TCP组包器成功")); //启动网络 @@ -238,7 +248,7 @@ int main(int argc, char** argv) if (NULL == xhTCPSocket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动TCP网络服务器失败,错误:%lX"), NetCore_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动TCP网络服务器成功,TCP端口:%d,IO:%d"), st_ServiceCfg.nTCPPort, st_ServiceCfg.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhTCPSocket, MessageQueue_Callback_TCPLogin, MessageQueue_Callback_TCPRecv, MessageQueue_Callback_TCPLeave); @@ -257,7 +267,7 @@ int main(int argc, char** argv) if (NULL == xhTCPPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动TCP线程池服务失败,错误:%lX"), ManagePool_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动TCP线程池服务成功,启动个数:%d"), st_ServiceCfg.st_XMax.nTCPThread); } @@ -272,7 +282,7 @@ int main(int argc, char** argv) if (NULL == xhHTTPPacket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务器中,初始化HTTP组包失败,错误:%lX"), HttpProtocol_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化HTTP组包成功,IO线程个数:%d"), st_ServiceCfg.st_XMax.nHttpThread); @@ -280,7 +290,7 @@ int main(int argc, char** argv) if (NULL == xhHTTPSocket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动HTTP网络服务器失败,错误:%lX"), NetCore_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动HTTP网络服务器成功,HTTP端口:%d,IO:%d"), st_ServiceCfg.nHttpPort, st_ServiceCfg.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhHTTPSocket, MessageQueue_Callback_HttpLogin, MessageQueue_Callback_HttpRecv, MessageQueue_Callback_HttpLeave); @@ -299,7 +309,7 @@ int main(int argc, char** argv) if (NULL == xhHttpPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动HTTP线程池服务失败,错误:%lX"), ManagePool_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动HTTP线程池服务成功,启动个数:%d"), st_ServiceCfg.st_XMax.nHttpThread); } @@ -314,7 +324,7 @@ int main(int argc, char** argv) if (NULL == xhWSPacket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务器中,初始化Websocket组包失败,错误:%lX"), WSFrame_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Websocket组包成功,IO线程个数:%d"), st_ServiceCfg.st_XMax.nWSThread); @@ -322,7 +332,7 @@ int main(int argc, char** argv) if (NULL == xhWSSocket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Websocket网络服务器失败,错误:%lX"), NetCore_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Websocket网络服务器成功,Websocket端口:%d,IO:%d"), st_ServiceCfg.nWSPort, st_ServiceCfg.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhWSSocket, MessageQueue_Callback_WSLogin, MessageQueue_Callback_WSRecv, MessageQueue_Callback_WSLeave); @@ -341,7 +351,7 @@ int main(int argc, char** argv) if (NULL == xhWSPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Websocket线程池服务失败,错误:%lX"), ManagePool_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Websocket线程池服务成功,启动个数:%d"), st_ServiceCfg.st_XMax.nWSThread); } @@ -355,7 +365,7 @@ int main(int argc, char** argv) if (!MQTTProtocol_Parse_Init(st_ServiceCfg.st_XMax.nMQTTThread)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务器中,初始化MQTT组包失败,错误:%lX"), MQTTProtocol_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化MQTT组包成功,IO线程个数:%d"), st_ServiceCfg.st_XMax.nMQTTThread); @@ -363,7 +373,7 @@ int main(int argc, char** argv) if (NULL == xhMQTTSocket) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动MQTT网络服务器失败,错误:%lX"), NetCore_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动MQTT网络服务器成功,MQTT端口:%d,IO:%d"), st_ServiceCfg.nMQTTPort, st_ServiceCfg.st_XMax.nMQTTThread); NetCore_TCPXCore_RegisterCallBackEx(xhMQTTSocket, MessageQueue_Callback_MQTTLogin, MessageQueue_Callback_MQTTRecv, MessageQueue_Callback_MQTTLeave); @@ -382,7 +392,7 @@ int main(int argc, char** argv) if (NULL == xhWSPool) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动MQTT线程池服务失败,错误:%lX"), ManagePool_GetLastError()); - goto NETSERVICEEXIT; + goto XENGINE_APPEXIST; } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动MQTT线程池服务成功,启动个数:%d"), st_ServiceCfg.st_XMax.nMQTTThread); } @@ -390,20 +400,14 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,MQTT消息服务没有被启用")); } +#ifndef _DEBUG //发送信息报告 if (st_ServiceCfg.st_XReport.bEnable && !bIsTest) { - if (InfoReport_APIMachine_Send(st_ServiceCfg.st_XReport.tszAPIUrl, st_ServiceCfg.st_XReport.tszServiceName)) + __int64x nTimeCount = 0; + if (InfoReport_APIMachine_Send(st_ServiceCfg.st_XReport.tszAPIUrl, st_ServiceCfg.st_XReport.tszServiceName, &nTimeCount)) { - __int64x nTimeCount = 0; - if (InfoReport_APIMachine_GetTime(st_ServiceCfg.st_XReport.tszAPIUrl, st_ServiceCfg.st_XReport.tszServiceName, &nTimeCount)) - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动信息报告给API服务器:%s 成功,报告次数:%lld"), st_ServiceCfg.st_XReport.tszAPIUrl, nTimeCount); - } - else - { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动信息报告给API服务器:%s 成功,获取报告次数失败,错误:%lX"), st_ServiceCfg.st_XReport.tszAPIUrl, InfoReport_GetLastError()); - } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动信息报告给API服务器:%s 成功,报告次数:%lld"), st_ServiceCfg.st_XReport.tszAPIUrl, nTimeCount); } else { @@ -414,7 +418,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - +#endif XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,服务运行中,XEngine版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_Version_XNumberStr(), BaseLib_Version_XTypeStr(), st_ServiceCfg.st_XVer.pStl_ListStorage->size(), st_ServiceCfg.st_XVer.pStl_ListStorage->front().c_str()); while (true) @@ -426,7 +430,7 @@ int main(int argc, char** argv) } std::this_thread::sleep_for(std::chrono::seconds(1)); } -NETSERVICEEXIT: +XENGINE_APPEXIST: bIsRun = false; if (bIsTest && 0 == nRet) @@ -452,6 +456,7 @@ int main(int argc, char** argv) ManagePool_Thread_NQDestroy(xhHttpPool); ManagePool_Thread_NQDestroy(xhWSPool); ManagePool_Thread_NQDestroy(xhMQTTPool); + ManagePool_Memory_Destory(xhMemPool); DBModule_MQData_Destory(); DBModule_MQUser_Destory(); diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj index 8c20b2d..63e0c4d 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj @@ -236,6 +236,8 @@ + + @@ -247,6 +249,9 @@ + + + diff --git a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj.filters b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj.filters index 33d8cc5..d7a9f61 100644 --- a/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj.filters +++ b/XEngine_Source/XEngine_MQServiceApp/XEngine_MQServiceApp.vcxproj.filters @@ -13,6 +13,12 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {68cf4dfc-0b9c-4a4f-8449-80ebb78bd5e0} + + + {7871adb5-b300-47af-adb4-bc1d9bcf6039} + @@ -39,6 +45,12 @@ 源文件 + + 源文件\MQService_HTTPTask + + + 源文件\MQService_HTTPTask + @@ -65,5 +77,14 @@ 头文件 + + 头文件\MQService_HTTPTask + + + 头文件\MQService_HTTPTask + + + 头文件 + \ No newline at end of file diff --git a/XEngine_Source/XQueue_ProtocolHdr.h b/XEngine_Source/XQueue_ProtocolHdr.h index 9148158..35c88c4 100644 --- a/XEngine_Source/XQueue_ProtocolHdr.h +++ b/XEngine_Source/XQueue_ProtocolHdr.h @@ -58,11 +58,6 @@ #define ERROR_XENGINE_MESSAGE_AUTH_HTTP 0x002 //HTTP PASS验证失败 #define ERROR_XENGINE_MESSAGE_AUTH_USERPASS 0x003 //用户或者密码错误 #define ERROR_XENGINE_MESSAGE_AUTH_NOTLOGIN 0x004 //没有登陆,禁止操作 -#define ERROR_XENGINE_MESSAGE_AUTH_APIREG 0x005 //HTTP 远程注册失败 -#define ERROR_XENGINE_MESSAGE_AUTH_EXISTED 0x006 //用户已经存在 -#define ERROR_XENGINE_MESSAGE_AUTH_REGISTER 0x007 //用户注册失败,数据错误 -#define ERROR_XENGINE_MESSAGE_AUTH_APIDEL 0x008 //HTTP API删除失败 -#define ERROR_XENGINE_MESSAGE_AUTH_DELETE 0x009 //本地删除失败 #define ERROR_XENGINE_MESSAGE_XMQ_EXISTED 0x101 //消息存在 #define ERROR_XENGINE_MESSAGE_XMQ_INSERT 0x102 //插入数据库失败 @@ -85,6 +80,13 @@ #define ERROR_XENGINE_MESSAGE_HTTP_PARAMENT 0x201 //HTTP请求参数错误 #define ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE 0x202 //验证失败没有权限 #define ERROR_XENGINE_MESSAGE_HTTP_NOTFOUND 0x203 //没有找到请求的数据 +#define ERROR_XENGINE_MESSAGE_HTTP_PARSE 0x204 //解析失败,负载协议错误 +#define ERROR_XENGINE_MESSAGE_HTTP_SERVICE 0x205 //服务器错误 +#define ERROR_XENGINE_MESSAGE_HTTP_APIREG 0x206 //HTTP 远程注册失败 +#define ERROR_XENGINE_MESSAGE_HTTP_EXISTED 0x207 //用户已经存在 +#define ERROR_XENGINE_MESSAGE_HTTP_REGISTER 0x208 //用户注册失败,数据错误 +#define ERROR_XENGINE_MESSAGE_HTTP_APIDEL 0x209 //HTTP API删除失败 +#define ERROR_XENGINE_MESSAGE_HTTP_DELETE 0x210 //本地删除失败 /////////////////////////////////////////////////////////////////////////// // 导出的数据结构 ///////////////////////////////////////////////////////////////////////////