Last updated: Monday, March 9, 2009
Want to see the coming high-level API or participate in GNE development? See the new Design section.
GNE, or the Game Networking Engine, is a cross-platform, multithreaded, C++ networking library with an API specifically addressing the needs of game networking. There are two parts of GNE, the first being the mid-level classes that handle packeted, error checked, and bandwidth throttled communication between two peers. These were completed with GNE 0.5, although they still go under refactoring from time to time, and will until GNE 1.0.
The high-level classes will now be worked on and will handle things like unique player ID's, player-to-player text communications, and develop a framework for a game server. It will also have a list server which is a server list players can connect to find games to play in.
GNE was designed to take the latest in object-oriented programming and modern C++ techniques and apply them to provide a clean, safe, and robust API for game development. While the concepts in the mid-level API could be applied to more than just games, the high-level GNE API will be extremely game focused. While I discovered other networking libraries, I found that most are very "C"-like and none took advantage of all modern C++ advancements such as templates, inheritance, exceptions, RAII, and smart pointers. I believe that proper design leads to easier development and robust code that deals gracefully with network errors and exploit attemps.
GNE is not meant to be scalable to large environments, thus GNE is not suitable for running an MMORPG server, although it may be acceptable on the client side with a component implementing the GNE protocol on the server side. I have published the protocol information so that other implementations (possibly ones more scalable) can be created.
GNE is designed to do as much work for you as possible. It is called Game Networking "Engine" and not Game Networking "Library" because it is meant to be a framework to build the networking portion of your game rather than a set of "utility" functions. Thus GNE is aimed towards developers wanting to use an architecture rather than something to help them develop their own. Although, please excuse me when I interchange the terms "engine" and "library" when referring to GNE on the rest of this site ;).
Developers more interested in saving time than having absolute control should find GNE attractive.
Legend: In 0.70 :: In current SVN :: In 0.75 :: In GNE 1.0
The mid-level API has been re-examined from the ground up for stability and ease of use. This version of GNE breaks source-level compatibility with previous versions of GNE! This version also cannot communicate with previous versions of GNE software as well (you will receive an Error for this fact cleanly on both sides).
Partial experimental work has begun on the high-level API. This work began about a year ago before I decided to refactor the mid-level API and reexamine it for robustness and stability. Instead of removing it for this release I decided to leave the GNE code in its current state. Work will now resume on the high-level parts of GNE, so this API might change. Therefore any parts of GNE marked as "high-level" in the GNE documentation should be considered experimental quality and are provided only as a preview -- their interfaces may change entirely in the next release. You can treat the rest of GNE as being in "late beta". I've tested it somewhat but it hasn't been used in any major applications yet. In addition to the high-level API already with some implementations, there are header files in the include\gnelib\high directory of header files with documentation of parts of the GNE high-level API where implementation has not even started. I very much welcome your feedback on any parts of the high-level API before I start major implementation work.
You can view the current apichanges.htm doc here, which explains the major API changes in GNE 0.70
You can also view the changelog for more details about the large amount of changes not directly related to the major API changes.
GNE is passing the middle stages of development. The mid-level functionality is completed but has not been extensively tested. It should be considered "late beta" level. At this time I do not know of any bugs in the mid-level functionality.
Now that the mid-level functionality has been completed, work will begin on the requirements and design stage of the high-level API. All are welcome to join in on this discussion on the gnelib-users mailing lists on the SourceForge project site. Also check out the "Design" section of this page.
You can see the lastest changes for 0.75 in the trunk's changelog.
I am currently looking for some people to help me with this project. Anyone at any skill level will be able to help! Actually if you feel less than confident about your networking programming ability then it is your help I need the most, because I need to make sure the GNE API is easy to use and understand for people who have not programmed on it and understand it inside and out already (like me).
I need people at this point in the project to start taking a part simply by joining the mailing lists and/or commenting on the documentation and API of GNE to help address the following questions and help with the following:
If you are feeling like helping a more substantial amount, consider the following ways you can help GNE improve faster:
And lastly, of course, if you feel up to it, I can always use an additional coder or two, as right now I am working on the project myself in my spare time.
Any help you provide for GNE whether from an email of encouragement to becoming an GNE developer will help to improve the quality and speed of development of GNE and I thank you.
apt-get notes are for Debian-dervied Linux users (Debian/Ubuntu). Use apt-get install x or aptitude install x to get the packages.
See the tutorials page for installation instructions for GNE 0.70.
Development Version (SVN)
If you wish to follow the latest development, then download the SVN version.
(Last update, 24 Nov 2008) Use of the development version is currently recommended for all users of GNE given the age of 0.70. The development branch should actually be more stable and easier to build than 0.70. No major breaking work will go on until an actual 0.75 release is made.
The cmake-0.75 branch with the new CMake system has been merged into the trunk, so use:
svn co https://gnelib.svn.sourceforge.net/svnroot/gnelib/trunk gnelib
Fast instructions on UNIX (see readme files for customizations and detailed instructions):
cd gnelib mkdir build cd build cmake .. make install
The same technique will work for MinGW and MSYS except you will use the cmake GUI and maybe mingw32-make. For MSVC, use the CMake GUI to generate workspaces and then build "ALL_BUILD" to build everything, and build the install project to install.
Unix installation defaults to /usr/local, Windows defaults to %PROGRAMFILES%\GNE. Change CMAKE_INSTALL_PREFIX to change this.
Please read the readme files that were in the SVN repository for more detailed installation instructions.
This is a new section for the GNE site. Currently I'm working on putting up the design documents and diagrams discussing the parts of the new GNE High-Level API, and how they will work. I encourage your feedback on the GNE mailing lists or on the forums.
This documentation is for GNE 0.70. If you are using the SVN version, it is recommended that you download doxygen and generate the docs using the supplied doxygen.cfg file.