古塞夫基金會
這是 Galaxy Unlimited 平台的主要單一儲存庫。這裡包含的軟體是庫以及派生服務和應用程式的集合,本質上都是相當通用的。這些程式庫的首要目的是充當快速開發應用程式和服務的 C++ 工具箱。一些此類工具/應用程式/服務也包含在同一個單一儲存庫中。
請注意,主平台模組故意不強制要求較新版本的 C++,以允許它們在沒有現代編譯器可用的情況下使用。由於這個原因,任何較新語言功能的使用都傾向於透過巨集來處理,以便程式碼仍然可以使用較舊的編譯器進行編譯。
關於名字
GUCEF 曾經代表「Galaxy Unlimited Client Engine Framework」。它是具有獨立 GUCE 和 GU 軟體堆疊層的多層堆疊的一部分。 GUCE 代表「Galaxy Unlimited Client Engine」。 GUC 代表「Galaxy Unlimited Client」。 GU仍然是「Galaxy Unlimited」的縮寫。此時GUCEF和GUCE已經合併在一起,並且GUC和GU的一些部分也被合併。許多新開發不再關注客戶端,而是專注於支援服務和後端開發。
一點歷史
多年來,作者創建了各種程式碼庫並吸取了教訓。緩慢但肯定地出現了一個共同的程式碼核心,並開始有機成長。由於資料保留問題和年輕備份實踐,最初的通用核心程式碼庫多次部分遺失,並進一步受到缺乏財務資源的限制。各種儲存庫合併在一起,結合各種部分備份來建立 GUCEF 儲存庫的第一個版本。第一個版本在 SourceForce 上找到了它的公共主頁。最初使用CVS作為版本控制系統,接著是SVN,後來又是Git。當考慮遷移到 Git 時,也考慮了開源儲存庫的新家。由於開源社群越來越受歡迎,GitHub 贏得了成為 GUCEF 和一些相關儲存庫的新家的機會,並保留至今。
關於作者
除了依賴項之外,此儲存庫中的幾乎所有程式碼都是由 Dinand Vanvelzen 編寫的。 Dinand 在 20 世紀 80 年代小時候就開始編程,為 MSX 編寫彙編程式碼,MSX 是飛利浦設計的 PC 概念。後來在 20 世紀 90 年代,RAD 程式設計原理透過 Borland Delphi 成為人們的新愛好,隨後是 Borland C++ Builder。此時,作者開始了軟體工程黑暗藝術的專業教育。在應用程式編程和後端/底層程式之間採用了雙重策略,這在當時是不同程度的。在此期間,您在此儲存庫中找到的程式碼庫隨著概念的融合和發展而不斷增長和發展。在 2000 年代,作者的主要關注點是視覺化,主要是 3D 圖形,無論是專業的還是出於求知欲,都進入了這個儲存庫。移民到美國並組建家庭使新的發展緩慢了好幾年,直到個人情況穩定後才開始回升。正是在這個階段,年輕的理想主義開始讓位給實用主義。從專業角度來看,介入性醫療保健領域讓位給企業醫療保健,而企業醫療保健後來又讓位給金融部門。隨後的新發展務實地關注了作者職業生涯中的共同需求,並混合了偶然的奇怪項目作為達到目的的手段。
單一回購細分
- /platform :主要平台模組具有具體的可移植功能和透過插件利用附加功能的接口
- /plugins :這裡有各種插件,可以選擇用於擴充平台功能
- /projects :這有用於生成建置專案的腳本等
- /common/bin :這有專案的二進位輸出
- /dependencies :顧名思義,該資料夾包含插件使用的各種依賴庫,而不是直接由平台庫使用的依賴庫。
- /tests :顧名思義,它會保存一些專用的測試程式碼
如何為我的 IDE 產生項目
支援 IDE 專案/解決方案檔案的主要方法是透過 CMake。 CMake 檔案本身幾乎都是透過此儲存庫中包含的名為「ProjectGenerator」的工具自動產生的。 ProjectGenerator 使用最少的 ModuleInfo.xml 檔案對儲存庫中的檔案進行分析以識別模組,從那裡派生出所有需要的路徑並產生所需的檔案。這個工具還可以為其他工具鏈輸出中間件文件,而不僅僅是 CMake。還包括 premake 4 和 premake 5 以及 android make 文件,但它們目前更新不那麼頻繁,因此您的情況會有所不同。
在大多數情況下,您需要先前往 /projects/CMake 產生相關的 IDE 檔案。在該資料夾中,您將看到各種名稱很長的腳本。在某些時候,這將根據 TODO 清單進行重構,但目前方案如下:
例如,您有一個類似「RunCMake_Shared_CodeBlocks_Unix_Debug_pubsub2pubsub.sh」的腳本文件
- RunCMake_ :第一段只是出於歷史原因將其與資料夾中的其他檔案區分開來,請忽略。
- Shared_ :此段主要與 CMake 相關,其中傳遞的預設模組建置方法將是「動態」(dll/so)與靜態(.lib/.a)
- CodeBlocks_ :此段包含您希望為其產生專案文件的 IDE 的名稱,在本例中為 Code Blocks IDE
- Unix_:該段表示目標平台。某些 IDE 支援多個目標平台。
- Debug_ :該段可能不適用於所有腳本,這取決於生成器的功能。對於某些生成器,需要從一開始就為偵錯或發布版本建立專案文件本身。對於 Visual Studio 來說,這不是必要的
- pubsub2pubsub.sh :該段表示整個 mono-repo 上邏輯視圖的主要目標。在本例中,服務為 pubsub2pubsub。
換句話說,格式為:“RunCMake_Shared/Static_IDE to use_OS Target_Debug/Release_Target name.Executable script extension”
在 Windows 上,當您執行上述腳本和類似腳本時,它也會觸發 ProjectGenerator 的運作。這只是為了使流程更加簡單,因為通常提交的 CMake 檔案已經是最新的,因此通常可以刪除並跳過此步驟。在此潛在步驟之後,將呼叫 CMake 來處理建置檔案的生成。此類文件寫入/common/bin。此儲存庫遵循臨時輸出檔案不應與程式碼混合的想法。如果您因任何原因遇到陳舊/損壞的輸出檔案(磁碟問題?)的麻煩,您總是可以刪除 /common/bin 下的整個資料夾結構
包含的平台庫
- gucefMT:具有多執行緒程式設計原語的函式庫。可能會在某個時候被合併到 gucefCORE 中。
- gucefCORE:具有平台上建置功能運作方式核心功能的函式庫,例如外掛程式/日誌記錄/指標/事件/等系統
- gucefIMAGE:建構利用數位影像的軟體時所使用的可選庫
- gucefVFS:建置軟體時使用的可選庫,該軟體除了基本存取之外還執行更複雜的檔案系統樣式 I/O。 VFS = 虛擬檔案系統。
- gucefCOMCORE:建構執行基本網路的軟體時所使用的可選函式庫
- gucefCOM:建立執行網路並使用相當業界標準功能(例如 StatsD)的軟體時所使用的選用程式庫
- gucefWEB:建構執行 Internet/Web 風格網路的軟體時所使用的選用函式庫
- gucefPUBSUB:建立使用發布/訂閱概念的軟體時使用的可選庫
- gucefGUI:需要 GUI 時使用的選用函式庫。主要關注的是渲染上下文中的 GUI,而不是作業系統本機 GUI
- gucefINPUT:需要支援人工輸入設備時使用的可選庫。
- gucefLOADER:動態載入多個GUCEF平台版本時所使用的選用函式庫
- gucefPATCHER:當需要支援自動修補功能與最終用戶手動下載更新時使用的選用程式庫
- gucefMATH:透過 OO 概念執行數學計算時使用的可選函式庫
- gucefKAITAI:利用 Kaitai 模式解釋二進位格式時所使用的選用函式庫
包含的平台插件
- dstorepluginPARSIFALXML:gucefCORE 外掛程式:新增 XML 的 DStore (DataNode) 編解碼器支援。透過 GUCEF 程式碼寫入並透過 ParsifalXML 依賴庫讀取
- dstorepluginJSONPARSER:gucefCORE 外掛:新增 DStore (DataNode) 對 JSON 的編解碼器支援。使用 json-parser 和 json-builder 依賴函式庫
- dstorepluginYAML:gucefCORE 外掛程式:新增 DStore (DataNode) 對 YAML 的編解碼器支援。使用libyaml依賴函式庫
- codecspluginZLIB:gucefCORE 插件:新增對 zlib/gzip/deflate/crc32/adler32 的編解碼器支持
- codecspluginSTBRUMMEHASH:gucefCORE 插件:新增對 CRC32/MD5/SHA1/SHA3/SHA256/Keccak 的編解碼器支持
- imgpluginDEVIL:gucefIMAGE 外掛程式:新增源自 DEVIL 映像依賴庫的數位影像管理功能。支援各種圖像編解碼器。
- imgpluginFLIC:gucefIMAGE 插件:添加對 FLIC 格式的圖像編解碼器支持
- imgpluginFreeImage:gucefIMAGE 外掛程式:新增源自 FreeImage 映像依賴程式庫的數位映像管理功能。支援各種圖像編解碼器。
- imgpluginITV:gucefIMAGE 插件:新增對逆向工程 ITV 格式的映像編解碼器支持
- vfspluginAWSS3:gucefVFS 外掛程式:新增 VFS 後端以安裝和使用 AWS S3 作為虛擬檔案系統的一部分
- vfspluginDVP:gucefVFS 外掛程式:過時的 VFS 後端,用於安裝和使用 DVP 存檔檔案作為虛擬檔案系統的一部分
- vfspluginITV:gucefVFS 外掛程式:VFS 後端,用於安裝和使用逆向工程 ITV 存檔檔案作為虛擬檔案系統的一部分
- vfspluginVP:gucefVFS 外掛:VFS 後端,用於安裝和使用「Violation Pack」存檔檔案作為虛擬檔案系統的一部分,例如遊戲 Decent 和 FreeSpace 使用的虛擬檔案系統
- vfspluginZIP:gucefVFS 外掛程式:VFS 後端,用於安裝和使用 zlib 相容存檔檔案作為虛擬檔案系統的一部分,例如 .gz 和 .zip
- inputdriverDIRECTINPUT8:gucefINPUT 外掛程式:新增輸入驅動程序,可透過 Microsoft DirectInput 8 進行輸入裝置交互
- inputdriverMSWINMSG:gucefINPUT 外掛程式:新增輸入驅動程序,可透過 Microsoft Windows Win32 API 訊息進行輸入裝置交互
- inputdriverNANDROID:gucefINPUT 外掛程式:新增輸入驅動程序,可透過本機 Android API 進行輸入裝置交互
- inputdriverOIS:gucefINPUT 外掛程式:透過 OIS 依賴函式庫新增用於輸入裝置互動的輸入驅動程式
- inputdriverXWINMSG:gucefINPUT 外掛程式:透過 Linux 的 X-Windowing 訊息系統新增用於輸入裝置互動的輸入驅動程式
- pubsubpluginAWSSNS:gucefPUBSUB 外掛程式:為 AWS 的 SNS 服務新增一個 pub-sub 概念相容的後端。使用 AWS C++ 開發工具包。
- pubsubpluginAWSSQS:gucefPUBSUB 插件:為 AWS 的 SQS 服務添加一個 pub-sub 概念相容的後端。使用 AWS C++ 開發工具包。
- pubsubpluginKAFKA:gucefPUBSUB 插件:為 Kafka 流添加一個 pub-sub 概念相容的後端。使用 RdKafka 依賴函式庫。
- pubsubpluginMSMQ:gucefPUBSUB 外掛程式:為 MSMQ 新增一個 pub-sub 概念相容的後端。使用Windows作業系統,需安裝MSMQ子系統。
- pubsubpluginREDISCLUSTER:gucefPUBSUB 插件:為 Redis 流添加一個 pub-sub 概念相容的後端。使用 redis++ 和hiredis 依賴項。
- pubsubpluginSTORAGE:gucefPUBSUB 插件:添加一個 pub-sub 概念相容的後端,允許與 VFS 及其功能輕鬆交互
- pubsubpluginUDP:gucefPUBSUB 插件:為基本 UDP 添加一個 pub-sub 概念相容的後端
- pubsubpluginWEB:gucefPUBSUB 外掛程式:為 HTTP/REST/WebSockets 等 Web 概念新增一個 pub-sub 概念相容的後端
- ProjectGenDependsFilter:ProjectGen 外掛:允許根據 dependent.exe 工具輸出報告過濾儲存庫中的庫
- ProjectGenVSImporter:ProjectGen 外掛程式:匯入 Visual Studio 專案檔案以產生新儲存庫的 ModuleInfo.xml 起點
- comcorepluginDBL:gucefCOMCORE 插件,嘗試提供來自 Myricom DBL 網路驅動程式的信息
- comcorepluginGEOOSM:gucefCOMCORE 插件,新增了基於開放街道地圖的地理位置尋找功能
包含服務
- UdpViaTCP:橋接服務,透過 TCP 段傳輸 UDP 流量。將被 pubsub2pubsub 取代。
- udp2kafka:適配器服務,允許 UDP 流量進入 Kafka 流。將被 pubsub2pubsub 取代。
- udp2redis:適配器服務,允許 UDP 流量進入非群集 Redis 的 Redis 流。將被 pubsub2pubsub 取代。
- udp2rediscluster:適配器服務,允許 UDP 流量進入叢集 Redis 的 Redis 串流。將被 pubsub2pubsub 取代。
- ProcessMetrics:取得目標進程指標的代理服務。旨在作為高頻性能計數器等的有針對性的輕量級替代品
- redisinfo:監控服務,使用Redis協定取得Redis叢集的信息,並將這些資訊作為指標公開進行廣播
- pubsub2storage:適配器服務,在訊息傳遞範例和儲存之間進行更普遍的轉換。將被 pubsub2pubsub 取代。
- pubsub2pubsub:適配器服務,可以在不同的訊息傳遞範例之間進行更普遍的轉換。將取代許多其他適配器服務。
- FilePusher:代理服務,用於監控檔案系統中的某些檔案並將它們推送到 VFS 目標,例如 AWS S3。
- FileSorter:自動對檔案進行排序的代理服務。例如,可以方便地對數位圖片和影片存檔進行初始排序。
- GucefLogService:可以接受透過網路連線傳輸的 GUCEF 平台日誌的服務。針對我們無法擁有/存取本機日誌的情況
- ServerPortExtender:用於反轉應用程式伺服器連接埠的入站/出站連線啟動的服務,從而繞過僅限出口的限制
- UdpTransformer:採用入口 UDP 並執行簡單轉換然後重新傳輸的服務
- MsmqMetrics:代理服務,收集有關 MSMQ 隊列的信息,並隨後收集和傳輸所述隊列的指標
包含的工具
- ProjectGenerator:自動產生各種專案/模組檔案以及同一單一儲存庫的不同邏輯視圖的工具
- DCSBruteInstaller:利用某些硬體和該軟體的組合來暴力破解 DCS 家庭警報面板中的程式碼的工具
- itvExporter:經典遊戲中包含的資產的逆向工程匯出工具
- GucefArchiver:利用 VFS 及其外掛程式的基本歸檔工具
- HDFiller:顧名思義,它會填滿您的硬碟。用於測試場景。
- PubSubStorageTool:操作 pubsub 儲存插件產生的儲存檔案的工具
包含的雜項庫
- MemoryLeakFinder:動態載入的平台幫助程式庫,可在 GUCEF 平台功能的幫助下追蹤記憶體洩漏
- ProjectGen:包含 ProjectGenerator 工具的所有邏輯的函式庫。它支援插件來擴展功能。
待辦事項列表
- 短期:新增平台原生的基本 websocket 支持
- 短期:為編解碼器添加適當的參數支持
- 短期:新增 StringView 支持
- 短期:完成 pubsub2pubsub 'web' 插件的初始通過
- 短期:完成 pubsub2pubsub 'aws sns' 插件的初始通過
- 短期:完成 pubsub2pubsub 'aws sqs' 插件的初始通過
- 短期:新增配置驅動的 CodecChain 類
- 中期:修復 GitHub CI 整合。自動建立觸發器連結已損壞。
- 中期:新增 DataNode 架構系統
- 中期:新增配置驅動的消息轉換引擎
- 中期:新增 AWS Lambda 支持
- 中期:添加 Utf16 和 Utf32 支持
- 中期:對所有靜態字串引用使用 StringView 而不是 String
- 中期:將 ProjectGenerator 變成可以作為背景服務運行的東西
- 中期:透過 ProjectGenerator 完成 GitHub Actions 支持
- 中期:透過 ProjectGenerator 增加 GitLab CI 支持
- 中期:完全重命名平台來源文件,使其全部具有模組前綴
- 中期:刪除死程式碼,作為單一儲存庫中包含的專案更大的振興工作的一部分。確定其中包含的哪些其他應用程式值得保存。
- 中期:使用每個執行緒預先分配的輸出緩衝區為日誌系統新增流程支援作為最佳化
- 中期:重新建立平台控制台用戶端功能
- 中期:為受支援的平台添加本機安全套接字支持
- 長期:新增 Web 組裝支持
- 長期:透過 ProjectGenerator 添加 Jenkins CI 支持
- 有一天:棄用/撤銷類別的經典 MFC 樣式「C」前綴。這將是一個巨大的改變,打破一切,這就是為什麼它還沒有發生。
- 正在進行中:考慮過多的約束,評估更新各種依賴項的需要
- 正在進行中:完善日誌記錄/指標
- 正在進行中:新增更多 javadoc 格式(doxygen 相容)文檔