Forge Networking Remastered
We are proud to announce that we will be releasing Forge Networking Remastered soon!
Anyone who owns or buys Forge Networking before the release of Forge Networking Remastered will get it for free
We have taken all of the feedback from our users over the past year+ and compiled it into what people are wanting out of a networking system. So we thought it was time to remaster the system. We have taken out the largest complaints such as run-time reflection, as well as fixed a lot of bugs people were having such as array out of range errors every now and again, and out of order reliable packets. We have finally finished the core system and are moving into our Unity integration phase, now is when we need help from the community! 😀
We have made the system so generic, extensible and powerful that we are easily able to create all of the dreams we originally had with Forge Networking. Things such as NAT hole punching servers, a better and more reliable master server, a load balancer, matchmaking, bare metal, cloud integration, rooms/zones, chat servers, etc.
The new and improved Forge Networking Remastered was created from scratch (along with the help of our battle tested generic helpers such as BMSByte and ObjectMapper). We wanted to build this new system from the ground up so that we could guarantee that everything we wrote was designed with the core feedback and learning we have had, rather than hacks here and there to try and work what we wanted into the old system.
We will continue to support our original Forge Networking implementation for a period of time for transition and bug fixes, and the new Remastered version will be free to those who currently own or purchase Forge Networking. I am sure you all have a lot of questions, and we are ready to start accepting them. We also will be updating you all with our progress and hopefully getting feedback along the way.
Some up front information on questions we assume will be asked: Server authority As always we make sure all traffic goes through and is validated by the server. We have now added hooks for things like RPC calls so that you can detect the message sent and determine if it should be accepted based on its identity, receivers and arguments. We have also added the concept of a NetworkObject so that even the data being sent for position and various other properties can be validated by the server more deeply and independently.
Updated code base
Since we did write everything from the ground up and removed reflection, that does mean that some of the slow calls to dynamically get things like RPC methods and such have been removed. The biggest difference here is in how you create RPC methods, it is different, but just as easy to achieve.
No more deriving from Simple Networked MonoBehavior or Networked Mono Behavior
We came up with a new concept of a Network Object attachment structure. Basically this means that you no longer have to write code around your code to get things networked. Rather you will access a property in your class and assign variables and/or call RPC methods using the Network Object.
We will provide new UI to essentially write all of the base code for you. You will be able to create a Network Object type, specify its properties, mockup its RPC methods and so forth. This gives the user a graphical representation of what is available for them on the network for this type of object. That means we can show exactly how large the payload for a message would be for this object, allow you to choose compressed types, and spend less time learning an API or going through documentation as the UI will guide you through any setup.
Still open source, still can write code
Sure, we provide a UI and write a lot of the network code for you, but what if you want to extend the system to support things that the UI just can’t? Well as always we will be providing full source code so you can dive in and extend the system to your heart’s desire. We also will be writing documentation and generating the API for the new system so that you will be able to achieve complex behaviors! 😀 This code generation will follow our same process of what we have done with the existing Forge Networking solution in that it will all be documented in an enclosed pdf like ‘ForgeNetworking_Documentation.pdf’ included in every asset package.
From bytes to Bits
Now that we generate your base network code, that means we can compress the data even further, we are constructing new data types for smaller float ranges to compress your data to very small packets. We are able to take the input from the generation tool and do any bitwise operations to minimize the traffic based on your desired data types!
No reflection means solid network replication
Since we no longer use reflection to dynamically get types and cache them, that means that everything is 1:1 between the client and the server. No more guesswork on the server and no wasting bytes trying to parse or decode what is going on in the message from the client as the message signatures are now no longer generic or dynamic. All of the generic capabilities are still there using the UI, when you have designed your network object (in UI or by hand coding it) the server and client share the same exact code, signatures, execution orders, and so forth. What does this mean? More speed, more reliability, less guess work, less wasted data.
PLEASE NOTE We will be providing examples of all of this as we continue with our integration within Unity. We can go further into detail in separate posts about them if you would like :). This post is just an announcement for you to ask questions we haven’t addressed or give any other feedback.