GUCEF
Ini adalah mono-repo utama untuk Platform Galaxy Unlimited. Perangkat lunak yang terdapat di sini adalah kumpulan perpustakaan dan layanan turunan serta aplikasi yang semuanya bersifat cukup umum. Tujuan utama dari perpustakaan ini adalah untuk bertindak sebagai alat C++ yang dapat digunakan untuk mengembangkan aplikasi dan layanan dengan cepat. Beberapa alat/aplikasi/layanan tersebut juga disertakan dalam mono-repo yang sama.
Perhatikan bahwa modul platform utama sengaja tidak mengamanatkan versi C++ yang lebih baru agar dapat digunakan dalam situasi di mana tidak ada kompiler modern yang tersedia. Setiap penggunaan fitur bahasa yang lebih baru cenderung ditangani melalui makro sehingga kode masih dapat dikompilasi menggunakan kompiler lama.
Tentang nama
GUCEF merupakan singkatan dari "Galaxy Unlimited Client Engine Framework" pada suatu waktu. Itu adalah bagian dari tumpukan multi-tingkat yang memiliki tingkat tumpukan perangkat lunak GUCE dan GU yang independen. GUCE adalah singkatan dari "Galaxy Unlimited Client Engine". GUC adalah singkatan dari "Galaxy Unlimited Client". GU masih merupakan singkatan dari "Galaxy Unlimited". Saat ini GUCEF dan GUCE telah bergabung dan beberapa bagian GUC dan GU juga telah digabungkan. Alih-alih berfokus pada sisi klien pada banyak pengembangan baru, fokusnya adalah pada layanan pendukung dan pengembangan back end secara umum.
Sedikit sejarah
Selama bertahun-tahun berbagai basis kode dibuat dan pelajaran yang didapat oleh penulis. Perlahan tapi pasti inti kode umum muncul dan mulai tumbuh secara organik. Basis kode inti umum yang asli sebagian hilang beberapa kali karena masalah penyimpanan data dan praktik pencadangan data, yang selanjutnya dibatasi oleh kurangnya sumber daya keuangan. Berbagai repositori digabungkan, menggabungkan berbagai cadangan parsial untuk membuat versi pertama repo GUCEF. Versi pertama ini mendapat tempat umum di SourceForce. Awalnya CVS digunakan sebagai sistem kontrol versi, diikuti oleh SVN dan kemudian diikuti oleh Git. Ketika perpindahan ke Git dipertimbangkan, rumah baru untuk repo open source juga dipertimbangkan. Karena meningkatnya popularitas komunitas sumber terbuka, GitHub memenangkan hari itu sebagai rumah baru bagi GUCEF dan beberapa repo terkait yang masih ada hingga saat ini.
Tentang penulis
Selain ketergantungan, hampir semua kode dalam repositori ini ditulis oleh Dinand Vanvelzen. Dinand memulai pemrograman sejak kecil pada tahun 1980-an, menulis kode perakitan untuk MSX yang merupakan desain Philips yang mengambil konsep PC. Kemudian pada tahun 1990-an prinsip pemrograman RAD menjadi hubungan cinta baru melalui Borland Delphi diikuti oleh Borland C++ Builder. Pada saat ini penulis telah memulai pendidikan profesional dalam seni gelap rekayasa perangkat lunak. Strategi ganda diterapkan antara pemrograman aplikasi dan pemrograman back-end/tingkat bawah yang tingkatannya berbeda pada saat itu. Selama ini basis kode yang Anda temukan di repositori ini terus tumbuh dan berkembang seiring dengan perpaduan dan evolusi konsep. Selama tahun 2000an fokus utama penulis adalah pada visualisasi, sebagian besar grafis 3D baik secara profesional maupun sebagai keingintahuan intelektual masuk ke dalam repositori ini. Migrasi ke Amerika Serikat dan memulai sebuah keluarga memperlambat perkembangan baru selama beberapa tahun sebelum mulai pulih kembali setelah situasi pribadi stabil. Pada fase inilah idealisme kaum muda mulai digantikan oleh pragmatisme. Secara profesional, domain layanan kesehatan intervensi memberi jalan kepada layanan kesehatan perusahaan yang kemudian digantikan oleh sektor keuangan. Perkembangan baru selanjutnya secara pragmatis berfokus pada kebutuhan umum dalam kehidupan profesional penulis dengan proyek-proyek aneh yang tidak disengaja digabungkan sebagai alat untuk mencapai tujuan.
kerusakan mono-repo
- /platform : ini memiliki modul platform utama yang memiliki fungsionalitas portabel konkrit dan antarmuka untuk memanfaatkan fungsionalitas tambahan melalui plugin
- /plugins : ini memiliki berbagai plugin yang secara opsional dapat digunakan untuk memperluas kemampuan platform
- /projects : ini memiliki skrip dan sejenisnya untuk menghasilkan proyek pembangunan
- /common/bin : ini memiliki keluaran proyek biner
- /dependencies : Seperti namanya, folder ini memiliki berbagai perpustakaan ketergantungan yang digunakan oleh plugin, tidak pernah oleh perpustakaan platform secara langsung.
- /tests : Seperti namanya, ini menyimpan beberapa kode pengujian khusus
Bagaimana cara menghasilkan proyek untuk IDE saya
Metode utama yang mendukung file proyek/solusi IDE adalah melalui CMake. File CMake sendiri hampir semuanya dibuat secara otomatis melalui alat yang disertakan dalam repo ini yang disebut 'ProjectGenerator'. ProjectGenerator melakukan analisis file di repo dengan file ModuleInfo.xml minimal untuk mengidentifikasi modul, dari sana ia memperoleh semua jalur yang diperlukan dan menghasilkan file yang diperlukan. Alat yang sama ini juga dapat menghasilkan file middleware untuk rantai alat lain, bukan hanya CMake. Ada juga file premake 4 dan premake 5 dan android make yang disertakan tetapi saat ini file tersebut tidak diperbarui sesering sehingga milage Anda akan bervariasi.
Dalam kebanyakan kasus, Anda ingin membuka /projects/CMake terlebih dahulu untuk membuat file IDE yang relevan. Di folder tersebut Anda akan melihat berbagai script dengan nama yang panjang. Pada titik tertentu ini akan difaktorkan ulang sesuai daftar TODO tetapi untuk saat ini skemanya adalah sebagai berikut:
Sebagai contoh Anda memiliki file skrip seperti 'RunCMake_Shared_CodeBlocks_Unix_Debug_pubsub2pubsub.sh'
- RunCMake_ : Segmen pertama ini hanya untuk membedakannya dari file lain di folder karena alasan historis, abaikan saja.
- Shared_ : Segmen ini sebagian besar terkait dengan CMake di mana metode pembuatan modul default yang diteruskan adalah 'dinamis' (dll/so) vs statis (.lib/.a)
- CodeBlocks_ : Segmen ini memiliki nama IDE yang ingin Anda buatkan file proyeknya, dalam contoh ini IDE Blok Kode
- Unix_ : Segmen ini menunjukkan platform target. Beberapa IDE mendukung berbagai platform target.
- Debug_ : Segmen ini mungkin tidak ada untuk semua skrip, tergantung pada kemampuan generator. Untuk beberapa generator, file proyek itu sendiri perlu dibuat dari awal untuk debug atau rilis build. Ini tidak diperlukan dalam kasus, katakanlah Visual Studio
- pubsub2pubsub.sh : Segmen ini menunjukkan target utama dari tampilan logis pada keseluruhan mono-repo. Dalam hal ini layanan pubsub2pubsub.
Dengan kata lain formatnya adalah: 'RunCMake_Shared/Static_IDE to use_OS Target_Debug/Release_Target name.Executable script extension'
Di Windows ketika Anda menjalankan skrip di atas dan skrip serupa, itu juga akan memicu dijalankannya ProjectGenerator. Hal ini hanya dimaksudkan untuk membuat alur lebih mudah karena biasanya file CMake yang dikomit sudah mutakhir sehingga langkah ini biasanya dapat dihilangkan dan dilewati. Mengikuti langkah potensial ini, CMake dipanggil untuk menangani pembuatan file build. File-file tersebut ditulis ke /common/bin. Repo ini mengikuti pemikiran bahwa file keluaran sementara tidak boleh dicampur dengan kode. Jika Anda mendapat masalah karena alasan apa pun dengan file keluaran yang basi/buruk (masalah disk?), Anda selalu dapat menghapus seluruh struktur folder di bawah/common/bin
Perpustakaan Platform Termuat
- gucefMT: Perpustakaan dengan primitif pemrograman multithread. Kemungkinan akan dimasukkan ke dalam gucefCORE suatu saat nanti.
- gucefCORE: Perpustakaan dengan fungsionalitas yang merupakan inti cara fungsionalitas yang dibangun di platform beroperasi seperti sistem plugin/logging/metrik/event/dll
- gucefIMAGE: Pustaka opsional yang digunakan saat membuat perangkat lunak yang memanfaatkan gambar digital
- gucefVFS: Pustaka opsional yang digunakan saat membuat perangkat lunak yang menjalankan I/O gaya sistem file yang lebih kompleks lebih dari sekadar akses dasar. VFS = Sistem File Virtual.
- gucefCOMCORE: Pustaka opsional yang digunakan saat membuat perangkat lunak yang menjalankan jaringan dasar
- gucefCOM: Pustaka opsional yang digunakan saat membuat perangkat lunak yang menjalankan jaringan dan menggunakan fungsionalitas standar industri yang memadai seperti StatsD
- gucefWEB: Pustaka opsional yang digunakan saat membuat perangkat lunak yang menjalankan jaringan gaya Internet/Web
- gucefPUBSUB: Pustaka opsional yang digunakan saat membuat perangkat lunak yang menggunakan konsep terbitkan/berlangganan
- gucefGUI: Pustaka opsional yang digunakan saat GUI diperlukan. Fokus utama adalah pada GUI dalam konteks rendering bukan GUI asli OS
- gucefINPUT: Pustaka opsional yang digunakan ketika dukungan untuk perangkat input manusia diperlukan.
- gucefLOADER: Pustaka opsional yang digunakan saat memuat beberapa versi platform GUCEF secara dinamis
- gucefPATCHER: Pustaka opsional yang digunakan ketika dukungan diperlukan untuk fungsi penambalan otomatis vs pengguna akhir mengunduh pembaruan secara manual
- gucefMATH: Pustaka opsional yang digunakan saat melakukan penghitungan matematika melalui konsep OO
- gucefKAITAI: Pustaka opsional yang digunakan saat menafsirkan format biner dengan memanfaatkan skema Kaitai untuk melakukannya
Plugin Platform Berisi
- dstorepluginPARSIFALXML: plugin gucefCORE: Menambahkan dukungan codec DStore (DataNode) untuk XML. Menulis melalui kode GUCEF dan membaca melalui perpustakaan ketergantungan ParsifalXML
- dstorepluginJSONPARSER: plugin gucefCORE: Menambahkan dukungan codec DStore (DataNode) untuk JSON. Menggunakan pustaka ketergantungan json-parser dan json-builder
- dstorepluginYAML: plugin gucefCORE: Menambahkan dukungan codec DStore (DataNode) untuk YAML. Menggunakan perpustakaan ketergantungan libyaml
- codecspluginZLIB: plugin gucefCORE: Menambahkan dukungan codec untuk zlib/gzip/deflate/crc32/adler32
- codecspluginSTBRUMMEHASH: plugin gucefCORE: Menambahkan dukungan codec untuk CRC32/MD5/SHA1/SHA3/SHA256/Keccak
- imgpluginDEVIL: plugin gucefIMAGE: Menambahkan fungsionalitas manajemen gambar digital yang bersumber dari perpustakaan ketergantungan gambar DEVIL. Mendukung berbagai codec gambar.
- imgpluginFLIC: plugin gucefIMAGE: Menambahkan dukungan codec gambar untuk format FLIC
- imgpluginFreeImage: plugin gucefIMAGE: Menambahkan fungsionalitas manajemen gambar digital yang bersumber dari perpustakaan ketergantungan gambar FreeImage. Mendukung berbagai codec gambar.
- imgpluginITV: plugin gucefIMAGE: Menambahkan dukungan codec gambar untuk format ITV yang direkayasa ulang
- vfspluginAWSS3: plugin gucefVFS: Menambahkan backend VFS untuk pemasangan dan menggunakan AWS S3 sebagai bagian dari sistem file virtual
- vfspluginDVP: plugin gucefVFS: Backend VFS yang sudah tidak berlaku lagi untuk memasang dan menggunakan file arsip DVP sebagai bagian dari sistem file virtual
- vfspluginITV: plugin gucefVFS: backend VFS untuk memasang dan menggunakan file arsip ITV yang direkayasa balik sebagai bagian dari sistem file virtual
- vfspluginVP: plugin gucefVFS: backend VFS untuk memasang dan menggunakan file arsip 'Violation Pack' sebagai bagian dari sistem file virtual seperti yang digunakan oleh game Decent dan FreeSpace
- vfspluginZIP: plugin gucefVFS: backend VFS untuk memasang dan menggunakan file arsip yang kompatibel dengan zlib sebagai bagian dari sistem file virtual seperti .gz dan .zip
- inputdriverDIRECTINPUT8: plugin gucefINPUT: Menambahkan driver input untuk interaksi perangkat input melalui Microsoft DirectInput 8
- inputdriverMSWINMSG: plugin gucefINPUT: Menambahkan driver input untuk interaksi perangkat input melalui pesan Microsoft Windows Win32 API
- inputdriverNANDROID: plugin gucefINPUT: Menambahkan driver input untuk interaksi perangkat input melalui API Android asli
- inputdriverOIS: plugin gucefINPUT: Menambahkan driver input untuk interaksi perangkat input melalui pustaka ketergantungan OIS
- inputdriverXWINMSG: plugin gucefINPUT: Menambahkan driver input untuk interaksi perangkat input melalui sistem pesan X-Windowing untuk Linux
- pubsubpluginAWSSNS: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk layanan SNS AWS. Menggunakan SDK AWS C++.
- pubsubpluginAWSSQS: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk layanan SQS AWS. Menggunakan SDK AWS C++.
- pubsubpluginKAFKA: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk aliran Kafka. Menggunakan perpustakaan ketergantungan RdKafka.
- pubsubpluginMSMQ: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk MSMQ. Menggunakan subsistem MSMQ sistem Operasi Windows yang perlu diinstal.
- pubsubpluginREDISCLUSTER: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk aliran Redis. Menggunakan dependensi redis++ dan Hiredis.
- pubsubpluginSTORAGE: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub yang memungkinkan interaksi mudah dengan VFS dan kemampuannya
- pubsubpluginUDP: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk UDP dasar
- pubsubpluginWEB: plugin gucefPUBSUB: Menambahkan backend yang kompatibel dengan konsep pub-sub untuk konsep Web seperti HTTP/REST/WebSockets
- ProjectGenDependsFilter: Plugin ProjectGen: Memungkinkan pemfilteran perpustakaan dalam repo berdasarkan laporan keluaran alat depend.exe
- ProjectGenVSImporter: Plugin ProjectGen: Mengimpor file proyek Visual Studio untuk menghasilkan titik awal ModuleInfo.xml untuk repo baru
- comcorepluginDBL: plugin gucefCOMCORE yang mencoba memberikan informasi dari driver jaringan Myricom DBL
- comcorepluginGEOOSM: plugin gucefCOMCORE yang menambahkan kemampuan pencarian lokasi geografis berbasis Open Street Maps
Layanan Terkandung
- UdpViaTCP: Layanan jembatan yang menyalurkan lalu lintas UDP melalui segmen TCP. Akan digantikan oleh pubsub2pubsub.
- udp2kafka: Layanan adaptor yang memungkinkan masuknya lalu lintas UDP ke aliran Kafka. Akan digantikan oleh pubsub2pubsub.
- udp2redis: Layanan adaptor yang memungkinkan masuknya lalu lintas UDP ke aliran Redis untuk redis yang tidak berkerumun. Akan digantikan oleh pubsub2pubsub.
- udp2rediscluster: Layanan adaptor yang memungkinkan masuknya lalu lintas UDP ke aliran Redis untuk redis berkerumun. Akan digantikan oleh pubsub2pubsub.
- ProcessMetrics: Layanan agen yang memperoleh metrik untuk proses target. Ditujukan sebagai alternatif ringan yang ditargetkan untuk penghitung kinerja frekuensi tinggi dan sejenisnya
- redisinfo: Layanan pemantauan yang menggunakan protokol Redis untuk memperoleh informasi tentang klaster Redis dan memaparkan informasi tersebut sebagai metrik untuk disiarkan
- pubsub2storage: Layanan adaptor yang menerjemahkan secara lebih umum antara paradigma perpesanan dan penyimpanan. Akan digantikan oleh pubsub2pubsub.
- pubsub2pubsub: Layanan adaptor yang menerjemahkan lebih umum antara paradigma perpesanan yang berbeda. Akan menggantikan banyak layanan adaptor lainnya.
- FilePusher: Layanan agen yang memantau sistem file untuk file tertentu dan mendorongnya ke tujuan VFS misalnya AWS S3.
- FileSorter: Layanan agen yang secara otomatis mengurutkan file. Berguna untuk penyortiran awal untuk gambar digital dan arsip video misalnya.
- GucefLogService: Layanan yang dapat menerima log platform GUCEF yang dialirkan melalui koneksi jaringan. Ditujukan pada situasi di mana kita tidak dapat memiliki/mengakses log lokal
- ServerPortExtender: Layanan yang digunakan untuk membalikkan inisiasi koneksi masuk/keluar untuk port server aplikasi sehingga melewati batasan jalan keluar saja
- UdpTransformer: Layanan yang menerima UDP yang masuk dan melakukan transformasi sederhana yang diikuti dengan transmisi ulang
- MsmqMetrics: Layanan agen yang mengumpulkan informasi tentang antrian MSMQ dan kemudian mengumpulkan dan mengirimkan metrik untuk antrian tersebut
Alat yang Terkandung
- ProjectGenerator: Alat untuk secara otomatis menghasilkan berbagai file proyek/modul dan tampilan logis berbeda dari mono-repo yang sama
- DCSBruteInstaller: Alat untuk memanfaatkan kombinasi beberapa perangkat keras dan perangkat lunak ini untuk memecahkan kode secara brute force di panel alarm rumah DCS
- itvExporter: Alat ekspor yang direkayasa ulang untuk aset yang terdapat dalam game klasik
- GucefArchiver: Alat pengarsipan dasar yang memanfaatkan VFS dan pluginnya
- HDFiller: Seperti namanya, ini mengisi hard drive Anda. Ditujukan untuk skenario pengujian.
- PubSubStorageTool: Alat untuk memanipulasi file penyimpanan yang dihasilkan oleh plugin penyimpanan pubsub
Berisi Perpustakaan Lain-Lain
- MemoryLeakFinder: Pustaka pembantu platform yang dimuat secara dinamis untuk melacak kebocoran memori dibantu oleh fungsionalitas platform GUCEF
- ProjectGen: Perpustakaan yang menyimpan semua logika alat ProjectGenerator. Ini mendukung plugin untuk memperluas fungsionalitas.
daftar TODO
- Jangka pendek: Tambahkan dukungan websocket dasar yang asli ke platform
- Jangka pendek: Tambahkan dukungan parameter yang tepat untuk codec
- Jangka pendek: Tambahkan dukungan StringView
- Jangka pendek: Selesaikan pass awal di plugin 'web' pubsub2pubsub
- Jangka pendek: Selesaikan pass awal di plugin pubsub2pubsub 'aws sns'
- Jangka pendek: Selesaikan pass awal di plugin pubsub2pubsub 'aws sqs'
- Jangka pendek: Tambahkan kelas CodecChain yang digerakkan oleh konfigurasi
- Jangka menengah: Perbaiki integrasi GitHub CI. Tautan pemicu pembuatan otomatis rusak.
- Jangka menengah: Tambahkan sistem skema DataNode
- Jangka menengah: Tambahkan mesin transformasi pesan yang digerakkan oleh konfigurasi
- Jangka menengah: Tambahkan dukungan AWS Lambda
- Jangka menengah: Tambahkan dukungan Utf16 dan Utf32
- Jangka menengah: Gunakan StringView alih-alih String untuk semua referensi string statis
- Jangka menengah: Ubah ProjectGenerator menjadi sesuatu yang dapat dijalankan sebagai layanan latar belakang
- Jangka menengah: Selesaikan dukungan GitHub Actions melalui ProjectGenerator
- Jangka menengah: Tambahkan dukungan GitLab CI melalui ProjectGenerator
- Jangka menengah: Selesaikan penggantian nama file sumber platform agar semuanya memiliki awalan modul
- Jangka menengah: Menghapus kode yang mati sebagai bagian dari upaya revitalisasi yang lebih besar dari proyek-proyek yang termasuk dalam mono-repo. Tentukan aplikasi lain mana yang ada di sini yang layak disimpan.
- Jangka menengah: Tambahkan dukungan aliran ke sistem logging menggunakan buffer keluaran yang telah dialokasikan sebelumnya per thread sebagai pengoptimalan
- Jangka menengah: Membuat ulang fungsionalitas klien konsol platform
- Jangka menengah: Tambahkan dukungan soket aman asli untuk platform yang didukung
- Jangka panjang: Tambahkan dukungan perakitan web
- Jangka panjang: Tambahkan dukungan Jenkins CI melalui ProjectGenerator
- Suatu hari: Menghentikan/membatalkan awalan 'C' gaya MFC klasik untuk kelas. Ini akan menjadi perubahan besar yang menghancurkan segalanya, itulah sebabnya hal ini belum terjadi.
- Sedang berlangsung: Mengevaluasi kebutuhan untuk memperbarui berbagai dependensi dengan mempertimbangkan banyaknya kendala
- Sedang berlangsung: Sempurnakan logging/metrik
- Sedang berlangsung: Tambahkan lebih banyak dokumentasi format javadoc (kompatibel dengan doxygen).