pigflower 1 месяц назад
Родитель
Сommit
d561dfceda

+ 55 - 62
server/.gitignore

@@ -1,62 +1,55 @@
-.vs
-.idea
-src/library/DeepMMO.dll
-src/library/DeepMMO.pdb
-src/library/DeepMMO.Server.dll
-src/library/DeepMMO.Server.pdb
-src/library/DeepMMO.Server.Connector.dll
-src/library/DeepMMO.Server.Connector.pdb
-src/library/OpenCards.Server.Account.dll
-src/library/OpenCards.Server.Account.pdb
-src/library/OpenCards.Server.DotNetCore.dll
-src/library/OpenCards.Server.DotNetCore.exe
-src/library/OpenCards.Server.DotNetCore.pdb
-src/library/OpenCards.Server.NameServer.dll
-src/library/OpenCards.Server.NameServer.exe
-src/library/OpenCards.Server.NameServer.pdb
-src/library/OpenCards.Server.NodeServer.dll
-src/library/OpenCards.Server.NodeServer.exe
-src/library/OpenCards.Server.NodeServer.pdb
-src/library/OpenCards.Service.Public.dll
-src/library/OpenCards.Service.Public.pdb
-src/server/OpenCards.Server.Main/redis/dump.rdb
-src/library/OpenCards.Service.Pay.dll
-src/library/OpenCards.Service.Pay.pdb
-src/library/OpenCards.Server.Arena.dll
-src/library/OpenCards.Server.Arena.pdb
-src/library/OpenCards.Service.Friend.dll
-src/library/OpenCards.Service.Friend.pdb
-src/library/OpenCards.Server.Bill.dll
-src/library/OpenCards.Server.Bill.pdb
-src/library/OpenCards.Server.BattleRecord.dll
-src/library/OpenCards.Server.BattleRecord.exe
-src/library/OpenCards.Server.BattleRecord.pdb
-src/library/OpenCards.Server.Bill.dll
-src/library/OpenCards.Server.Bill.exe
-src/library/OpenCards.Server.Bill.pdb
-src/library/OpenCards.Service.Chat.dll
-src/library/OpenCards.Service.Chat.pdb
-output.report/net5.0/OpenCards.Core.dll
-output.report/net5.0/OpenCards.Core.pdb
-output.report/net5.0/OpenCards.Plugin.Battle.Report.dll
-output.report/net5.0/OpenCards.Plugin.Battle.Report.pdb
-output.report/net5.0/OpenCards.Plugin.Battle.Report.Web.dll
-output.report/net5.0/OpenCards.Plugin.Battle.Report.Web.pdb
-output.report/net5.0/DeepGame3D.dll
-output.report/net5.0/DeepGame3D.Host.dll
-output.report/net5.0/DeepGame3D.Slave.dll
-s/rc/client/OpenCards.Client.Unity/_out/OpenCards.Client.Core.dll
-src/client/OpenCards.Client.Unity/_out/OpenCards.Core.dll
-src/client/OpenCards.Client.Unity/_out/OpenCards.GenCodec.dll
-src/library/luavm.dll
-src/library/Neo.Lua.dll
-src/library/Aliyun.OSS.dll
-src/library/OpenCards.Server.StageRank.dll
-src/library/OpenCards.Server.StageRank.pdb
-src/library/BouncyCastle.Crypto.dll
-src/library/OpenCards.Service.Tools.dll
-src/library/OpenCards.Service.Tools.exe
-src/library/OpenCards.Service.Tools.pdb
-src/library/OpenCards.Service.Tool.dll
-src/library/OpenCards.Service.Tool.pdb
-/src/server/OpenCards.Server.Main/redis/*.rdb
+# ===== IDE =====
+.vs/
+.idea/
+*.DotSettings.user
+
+# ===== .NET Build Output =====
+[Dd]ebug/
+[Rr]elease/
+bin/
+obj/
+*.user
+*.suo
+*.userosscache
+*.sln.docstates
+
+# ===== NuGet =====
+.nuget/
+packages/
+*.nupkg
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ===== Test Results =====
+TestResults/
+[Cc]overage*/
+*.coverage
+*.coveragexml
+
+# ===== Logs =====
+*.log
+logs/
+
+# ===== OS =====
+.DS_Store
+Thumbs.db
+Desktop.ini
+
+# ===== Project: src/library build artifacts =====
+# (third-party dlls tracked in src/library/.gitignore)
+src/library/*.dll
+src/library/*.pdb
+src/library/*.exe
+
+# ===== Project: output directories =====
+output.report/net5.0/*.dll
+output.report/net5.0/*.pdb
+output.report/net5.0/*.exe
+
+# ===== Project: client unity output =====
+src/client/OpenCards.Client.Unity/_out/*.dll
+src/client/OpenCards.Client.Unity/_out/*.pdb
+
+# ===== Project: Redis =====
+**/*.rdb

+ 31 - 0
server/Workspace.server.slnf

@@ -0,0 +1,31 @@
+{
+  "solution": {
+    "path": "Workspace.sln",
+    "projects": [
+      "src\\core\\OpenCards.Core\\OpenCards.Core.csproj",
+      "src\\core\\OpenCards.GenCodec\\OpenCards.GenCodec.csproj",
+      "src\\core\\OpenCards.Tools\\OpenCards.Tools.csproj",
+      "src\\client\\OpenCards.Client.Core\\OpenCards.Client.Core.csproj",
+      "src\\server\\OpenCards.Server.Core\\OpenCards.Server.Core.csproj",
+      "src\\server\\OpenCards.Server.GenORM\\OpenCards.Server.GenORM.csproj",
+      "src\\server\\OpenCards.Server.Tools\\OpenCards.Server.Tools.csproj",
+      "src\\server\\OpenCards.Service.Connector\\OpenCards.Service.Connector.csproj",
+      "src\\server\\OpenCards.Server.Main\\OpenCards.Server.Main.csproj",
+      "src\\server\\OpenCards.Server.Logic\\OpenCards.Server.Logic.csproj",
+      "src\\server\\OpenCards.Server.Common\\OpenCards.Server.Common.csproj",
+      "src\\server\\OpenCards.Service.Guild\\OpenCards.Service.Guild.csproj",
+      "src\\server\\OpenCards.Server.DotNetCore\\OpenCards.Server.DotNetCore.csproj",
+      "src\\server\\OpenCards.Service.Center\\OpenCards.Service.Center.csproj",
+      "src\\server\\OpenCards.Service.Public\\OpenCards.Service.Public.csproj",
+      "src\\server\\OpenCards.Server.Account\\OpenCards.Server.Account.csproj",
+      "src\\server\\OpenCards.Service.Pay\\OpenCards.Service.Pay.csproj",
+      "src\\server\\OpenCards.Server.ArenaValor\\OpenCards.Server.Arena.csproj",
+      "src\\server\\OpenCards.Service.Friend\\OpenCards.Service.Friend.csproj",
+      "src\\server\\OpenCards.Server.Bill\\OpenCards.Server.Bill.csproj",
+      "src\\server\\OpenCards.Service.Admin\\OpenCards.Service.Admin.csproj",
+      "src\\server\\OpenCards.Service.Chat\\OpenCards.Service.Chat.csproj",
+      "src\\server\\OpenCards.Server.StageRank\\OpenCards.Server.StageRank.csproj",
+      "src\\server\\OpenCards.Service.Tool\\OpenCards.Service.Tool.csproj"
+    ]
+  }
+}

+ 167 - 0
server/build.sh

@@ -0,0 +1,167 @@
+#!/bin/bash
+set -euo pipefail
+
+# ─── 颜色 ───────────────────────────────────────────────────────────────────
+GREEN='\033[0;32m'
+RED='\033[0;31m'
+YELLOW='\033[1;33m'
+CYAN='\033[0;36m'
+NC='\033[0m'
+
+log_info()  { echo -e "${CYAN}[INFO]  $*${NC}"; }
+log_ok()    { echo -e "${GREEN}[OK]    $*${NC}"; }
+log_warn()  { echo -e "${YELLOW}[WARN]  $*${NC}"; }
+log_error() { echo -e "${RED}[ERROR] $*${NC}"; }
+
+# ─── 默认参数 ────────────────────────────────────────────────────────────────
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+# Windows-only 项目 (net5.0-windows) 无法在 macOS/Linux 编译,非 Windows 用 server filter
+if [[ "$(uname -s)" == "MINGW"* ]] || [[ "$(uname -s)" == "CYGWIN"* ]]; then
+    SOLUTION="$SCRIPT_DIR/Workspace.sln"
+else
+    SOLUTION="$SCRIPT_DIR/Workspace.server.slnf"
+fi
+OUTPUT_SERVER="$SCRIPT_DIR/src/_output.server"
+OUTPUT_REPORT="$SCRIPT_DIR/output.report"
+PACKAGE_DIR="$SCRIPT_DIR/dist"
+CONFIG="Release"
+PACK=false
+TARGET="server"   # server | report | all
+
+# ─── 用法 ────────────────────────────────────────────────────────────────────
+usage() {
+    cat <<EOF
+用法: $0 [选项]
+
+选项:
+  -c <Debug|Release>   编译配置 (默认: Release)
+  -t <server|report|all>  打包目标 (默认: server)
+  -p                   编译后打包成 tar.gz
+  -h                   显示帮助
+
+示例:
+  $0                        # Release 编译
+  $0 -c Debug               # Debug 编译
+  $0 -c Release -p          # Release 编译并打包服务端
+  $0 -c Release -t all -p   # Release 编译并打包所有目标
+EOF
+    exit 0
+}
+
+# ─── 解析参数 ────────────────────────────────────────────────────────────────
+while getopts "c:t:ph" opt; do
+    case $opt in
+        c) CONFIG="$OPTARG" ;;
+        t) TARGET="$OPTARG" ;;
+        p) PACK=true ;;
+        h) usage ;;
+        *) usage ;;
+    esac
+done
+
+if [[ "$CONFIG" != "Debug" && "$CONFIG" != "Release" ]]; then
+    log_error "无效的编译配置: $CONFIG(只支持 Debug 或 Release)"
+    exit 1
+fi
+
+if [[ "$TARGET" != "server" && "$TARGET" != "report" && "$TARGET" != "all" ]]; then
+    log_error "无效的打包目标: $TARGET(只支持 server / report / all)"
+    exit 1
+fi
+
+# ─── 环境检查 ────────────────────────────────────────────────────────────────
+check_env() {
+    if ! command -v dotnet &>/dev/null; then
+        log_error "未找到 dotnet,请先安装 .NET SDK"
+        exit 1
+    fi
+
+    local dotnet_ver
+    dotnet_ver=$(dotnet --version)
+    log_info "dotnet 版本: $dotnet_ver"
+
+    if [ ! -f "$SOLUTION" ]; then
+        log_error "找不到 solution 文件: $SOLUTION"
+        exit 1
+    fi
+}
+
+# ─── 编译 ────────────────────────────────────────────────────────────────────
+do_build() {
+    log_info "开始编译  [配置: $CONFIG]"
+    log_info "Solution: $SOLUTION"
+    echo ""
+
+    if dotnet build "$SOLUTION" \
+        --configuration "$CONFIG" \
+        --no-incremental \
+        -v minimal; then
+        echo ""
+        log_ok "编译成功"
+    else
+        echo ""
+        log_error "编译失败,请检查上方错误信息"
+        exit 1
+    fi
+}
+
+# ─── 打包 ────────────────────────────────────────────────────────────────────
+do_pack() {
+    local timestamp
+    timestamp=$(date '+%Y%m%d_%H%M%S')
+
+    mkdir -p "$PACKAGE_DIR"
+
+    pack_target() {
+        local name="$1"
+        local src_dir="$2"
+
+        if [ ! -d "$src_dir" ]; then
+            log_warn "输出目录不存在,跳过打包: $src_dir"
+            return
+        fi
+
+        local archive="$PACKAGE_DIR/${name}_${CONFIG}_${timestamp}.tar.gz"
+        log_info "打包 $name -> $(basename "$archive")"
+
+        tar -czf "$archive" -C "$(dirname "$src_dir")" "$(basename "$src_dir")"
+
+        local size
+        size=$(du -sh "$archive" | cut -f1)
+        log_ok "打包完成: $archive  [$size]"
+    }
+
+    case "$TARGET" in
+        server) pack_target "server" "$OUTPUT_SERVER" ;;
+        report) pack_target "report" "$OUTPUT_REPORT" ;;
+        all)
+            pack_target "server" "$OUTPUT_SERVER"
+            pack_target "report" "$OUTPUT_REPORT"
+            ;;
+    esac
+}
+
+# ─── 主流程 ──────────────────────────────────────────────────────────────────
+main() {
+    echo ""
+    echo -e "${CYAN}========================================${NC}"
+    echo -e "${CYAN}  OpenCards Server 构建脚本${NC}"
+    echo -e "${CYAN}========================================${NC}"
+    echo ""
+
+    check_env
+    do_build
+
+    if $PACK; then
+        echo ""
+        do_pack
+    fi
+
+    echo ""
+    echo -e "${GREEN}========================================${NC}"
+    echo -e "${GREEN}  全部完成${NC}"
+    echo -e "${GREEN}========================================${NC}"
+    echo ""
+}
+
+main

+ 2 - 1
server/src/core/OpenCards.Tools/OpenCards.Tools.csproj

@@ -21,7 +21,8 @@
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
 
 
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+  <!-- Code gen + lua copy: Windows only (copylua.bat is Windows-specific) -->
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(OS)' == 'Windows_NT'">
     <Exec Command="dotnet $(TargetPath)&#xD;&#xA;call copylua" />
     <Exec Command="dotnet $(TargetPath)&#xD;&#xA;call copylua" />
   </Target>
   </Target>
 </Project>
 </Project>

+ 6 - 1
server/src/server/OpenCards.Server.Common/OpenCards.Server.Common.csproj

@@ -40,8 +40,13 @@
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
 
 
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+  <!-- Windows: xcopy; macOS/Linux: MSBuild Copy task -->
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(OS)' == 'Windows_NT'">
     <Exec Command="xcopy /r /y $(ProjectDir)\BILogger\log4bi.config $(OutDir)..\&#xD;&#xA;xcopy /r /y $(ProjectDir)\BILogger\log4net.config $(OutDir)..\" />
     <Exec Command="xcopy /r /y $(ProjectDir)\BILogger\log4bi.config $(OutDir)..\&#xD;&#xA;xcopy /r /y $(ProjectDir)\BILogger\log4net.config $(OutDir)..\" />
   </Target>
   </Target>
+  <Target Name="PostBuildUnix" AfterTargets="PostBuildEvent" Condition="'$(OS)' != 'Windows_NT'">
+    <Copy SourceFiles="$(ProjectDir)BILogger/log4bi.config" DestinationFolder="$(OutDir)../" />
+    <Copy SourceFiles="$(ProjectDir)BILogger/log4net.config" DestinationFolder="$(OutDir)../" />
+  </Target>
 
 
 </Project>
 </Project>

+ 8 - 1
server/src/server/OpenCards.Server.DotNetCore/OpenCards.Server.DotNetCore.csproj

@@ -116,8 +116,15 @@
     <PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
     <PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
   </ItemGroup>
   </ItemGroup>
 
 
-  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+  <!-- copydll.bat copies redis config to output: Windows only -->
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(OS)' == 'Windows_NT'">
     <Exec Command="call copydll $(TargetDir) $(ProjectDir)" />
     <Exec Command="call copydll $(TargetDir) $(ProjectDir)" />
   </Target>
   </Target>
+  <Target Name="PostBuildUnix" AfterTargets="PostBuildEvent" Condition="'$(OS)' != 'Windows_NT'">
+    <ItemGroup>
+      <RedisConfigs Include="$(ProjectDir)..\..\server\OpenCards.Server.Main\redis\*.*" />
+    </ItemGroup>
+    <Copy SourceFiles="@(RedisConfigs)" DestinationFolder="$(TargetDir)redis/" />
+  </Target>
 
 
 </Project>
 </Project>

+ 4 - 3
server/src/server/OpenCards.Server.Tools/OpenCards.Server.Tools.csproj

@@ -37,8 +37,9 @@
       <HintPath>..\..\library\Newtonsoft.Json.dll</HintPath>
       <HintPath>..\..\library\Newtonsoft.Json.dll</HintPath>
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
-	<Target Name="PostBuild" AfterTargets="PostBuildEvent">
-		<Exec Command="dotnet $(TargetPath)" />
-	</Target>
+  <!-- Code gen tool: Windows only (crashes on macOS due to missing paths) -->
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(OS)' == 'Windows_NT'">
+    <Exec Command="dotnet $(TargetPath)" />
+  </Target>
 
 
 </Project>
 </Project>