Removes the ACE dependency entirely and rebuilds what sat on top of it.
Networking. WorldSocket and WorldSocketMgr are gone, replaced by src/proto/ --
a library that links neither the game nor the database, so the boundary is
enforced by the linker rather than by convention. The two sides talk through
symmetric interfaces (IWorldGateway, IClientLink) and neither names the other's
types. Framing moved into a PacketCodec that reads header bytes explicitly
instead of aliasing a packed struct.
Concurrency. ACE's synchronisation primitives are replaced by the C++17
equivalents -- std::thread, std::mutex, std::shared_mutex, std::atomic,
thread_local -- with the recursive-locking cases untangled rather than papered
over with a recursive mutex. Singletons are Meyers singletons.
Common.h is deleted. Every file that needed something from it now names the
header that provides it. OpenSSL 3.x is mandatory and the deprecated low-level
API is gone, including the vendored MD5.
mangosd is rebuilt around an IService interface, with the world loop on the
main thread. ObjectAccessor is split into PlayerRegistry, CorpseManager and
ObjectLookup; player lookup is a hash lookup now rather than a linear scan.
The submodules are untouched and sit on their upstream tips. What they need in
order to build here lives under src/shared/Compat/, attached from outside by
cmake/SubmoduleCompat.cmake.
Fixes found on the way, none of them introduced by this work:
- InitializeOpcodes() was called by nobody after its only call site was
removed, leaving opcodeTable zero-initialised.
- BigNumber::AsByteArray padded at the wrong end, failing roughly one login
in 256; BigNumber::SetBinary wrote into a fixed stack buffer without
checking the length.
- MapManager::CreateMap took the same lock twice.
- Several targets were missing the OpenSSL strict-mode policy, and the
extractors used std::thread without declaring the dependency.
Tests live in src/tests/ behind -DWITH_TESTS, covering ByteBuffer, the network
engine, the ciphers and the codec on both the happy and the hostile path.
54 tests pass on MSVC, GCC/epoll, GCC/io_uring and Clang/kqueue; full builds
are green on all three toolchains with the same flags CI uses.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| .github | ||
| cmake | ||
| dep@23bcbbf822 | ||
| extra | ||
| src | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| Doxyfile.in | ||
| LICENSE | ||
| README.md | ||
Build Status:
Linux/MAC:
Windows:
Repository Status:
MangosTwo - Wrath of the Lich King WoW server
Mangos is an open source project written in C++. It's fast, runs on multiple platforms and stores game data in MySQL or MariaDB. It also has optional support for SOAP.
If you liked the third incarnation of World of Warcraft and still want to play it, this is the branch for you. We provide an authentication server where you can manage your users, and a world server which serves game content just like the original did back then.
It aims to be 100% compatible with the final version of WotLK World of Warcraft, namely patch 3.3.5a.
On top of that each update is automatically built by Travis CI (Linux/MAC) and AppVeyor (Windows) as you can see by the images in the heading above! We do love green builds, and working things.
Requirements
The server supports a wide range of operating systems, and various compiler platforms. In order to do that, we use various free cross-platform libraries and use CMake (v3.12+) to provide a cross-platform build system which adapts to your chosen operating system and compiler.
Operating systems
Currently we support running the server on the following operating systems:
- Windows, 32 bit and 64 bit. Windows Server 2008 (or newer) or Windows 8 (or newer) is recommended.
- Linux, 32 bit and 64 bit. Debian 7 and Ubuntu 12.04 LTS are recommended. Other distributions with similar package versions will work, too.
- BSD, 32 bit and 64 bit. FreeBSD, NetBSD, OpenBSD are recommended.
Of course, newer versions should work, too. In the case of Windows, matching server versions will work, too.
Compilers
Building the server is currently possible with these compilers:
-
Microsoft Visual Studio 32 bit and 64 bit. All editions of Visual Studio from 2015 upwards are officially supported (although support for 2015 and 2017 are end of life.)
-
Clang, 32 bit and 64 bit. The Clang compiler can be used on any supported operating system.
Dependencies
The server stands on the shoulders of several well-known Open Source libraries plus a few awesome, but less known libraries to prevent us from inventing the wheel again.
Please note that Linux and Mac OS X users should install packages using their systems package management instead of source packages.
- Git / Github for Windows: This version control software allows you to get the source files in the first place.
- MySQL / MariaDB: These databases are used to store content and user data.
- ACE: aka Adaptive Communication Environment, provides us with a solid cross-platform framework for abstracting operating system specific details.
- Recast: In order to create navigation data from the client's map files, Recast is used to do the dirty work. It provides functions for rendering, pathing, etc.
- G3D: This engine provides the basic framework for handling 3D data and is used to handle basic map data.
- Stormlib: Provides an abstraction layer for reading from the client's data files.
- Zlib/Zlib for Windows provides compression algorithms used in both MPQ archive handling and the client/server protocol.
- Bzip2/Bzip2 for Windows provides compression algorithms used in MPQ archives.
- OpenSSL/OpenSSL for Windows provides encryption algorithms used when authenticating clients.
ACE, Recast, G3D, Stormlib, Zlib and Bzip2 are included in the standard distribution as we rely on specific versions.
Optional dependencies
- Doxygen: If you want to export HTML or PDF formatted documentation for the Mangos API, you should install this.
We have a small, but extremely friendly and helpful community managed by MadMax and Antz.
Our discord/forum motto is:
'Be nice or Be somewhere else'
Any trolling or unpleasantness is swiftly dealt with !!
Official Website
We welcome anyone who is interested in enjoying older versions of wow or contributing and helping out !
Discord Server
We also have a Discord server where many of us hang out and discuss Mangos related stuff.
Main Wiki
The repository of as much information as we can pack in. Details regarding the Database, file type definitions, packet definitons etc.
Bug / Issue Tracker
Found an issue or something which doesn't seem right, please log it in the relevant section of the Bug Tracker.
Installation Guides
Installation instructions for various operation systems can be found here.
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
The full license is included in the file LICENSE.
We have all put in hundreds of hours of time for free to make the server what it
is today.
All we ask is that if you modify the code and make improvements, please have
the decency to feed those changes back to us.
In addition, as a special exception, permission is granted to link the code of Mangos with the OpenSSL project's OpenSSL library (or with modified versions of it that use the same license as the OpenSSL library), and distribute the linked executables. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL.
Acknowledgements
World of Warcraft, and all related art, images, and lore are copyright Blizzard Entertainment, Inc.
