Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 07-11-2015, 04:42 PM
lakedoo23
Sarnak
 
Join Date: Oct 2014
Posts: 30
Default Server Network Architecture

I am exploring different options for a game I want to create and was wondering if someone had information on the network architecture of the eqemuServer client / server, I am going to dig into the code to see how it works hopefully. However I was wondering if there was some documentation floating around that shows how the player / npc positions are input and updated? Just a cursory look, it seems like the client sends a position update to the server ~4 times a second and the server checks to see if the player is within a radius permissible based on velocity and previous position, otherwise they are flagged as cheating. Thanks in advances, hopefully this isnt too off-topic.
Reply With Quote
  #2  
Old 07-11-2015, 05:10 PM
Uleat's Avatar
Uleat
Developer
 
Join Date: Apr 2012
Location: North Carolina
Posts: 2,815
Default

Once you get get past the initial handshake, it's pretty much event-driven..with a few exceptions like you noted.

I assume you've already found this: https://github.com/EQEmu/Server/blob...ent_packet.cpp

On the out-going side..there's really not much coherency. Packet creation could be any where there is access to a data
stream.


To complicate things, we support multiple clients..with each having a chance of added/removed features and different
payload formatting.

If possible, we try to format server data structures to represent one of the clients.

When that's not possible, a 'hybrid' format is usually employed.


As far as documentation..there really is none.

Our wiki (http://wiki.eqemulator.org/i?M=Wiki) is really setup for user/admin/content developers, not code developers.

This base code has been around for over a decade and most contributors are (have been) part-time volunteers.


If you have specific questions, you can post them in the forums, or hop on irc and see if you can get a response there.
__________________
Uleat of Bertoxxulous

Compilin' Dirty
Reply With Quote
  #3  
Old 07-11-2015, 05:31 PM
lakedoo23
Sarnak
 
Join Date: Oct 2014
Posts: 30
Default

Thanks for the reply Uleat, I will do some more research with the links you provided.
Reply With Quote
  #4  
Old 07-11-2015, 05:56 PM
Uleat's Avatar
Uleat
Developer
 
Join Date: Apr 2012
Location: North Carolina
Posts: 2,815
Default

I should have noted that you can activate certain portions of the logging system to view things in real-time..like incoming/out-going
packets (with opcodes.)

I think #log will give you a help description of the flags.
__________________
Uleat of Bertoxxulous

Compilin' Dirty
Reply With Quote
  #5  
Old 07-11-2015, 07:19 PM
Zaela_S
Hill Giant
 
Join Date: Jun 2012
Posts: 216
Default

The server netcode is a bit of a mess to read. I made a start at a client networking library a little while ago that you might find a bit easier to follow. Doesn't have many of the details filled out (basically all it can do at this point is connect to a server masquerading as your client of choice, then send some chat messages and not much else) but the fundamentals are there. Socket -> Ack Manager -> Protocol Receiver probably the best places to start.

One thing I'd like to say about EQ's networking is that it kinda sucks. Plenty of one-off oddities and conditionally-present flags that seem like things that crept in over time and were never properly incorporated into the design. Could have saved some headaches if they just reserved an extra byte or two in the per-packet header for some 1-bit flags.
Reply With Quote
  #6  
Old 07-11-2015, 08:12 PM
lakedoo23
Sarnak
 
Join Date: Oct 2014
Posts: 30
Default

I am creating a game from scratch, thinking C# / lidgren (network library) for the server and using Unity for the front end, I love the way that the EQ Emu Server and client work together for movement of players and NPCs and wanted to use something similar using eqemu as a model, not to mention it seems to have lasted the test of time with the same design / architecture. Hopefully I can learn from what eqemu has without the issues, errr not issues that are the eqemu fault, the issues induced to help it be compliant with the client.
Reply With Quote
  #7  
Old 07-11-2015, 08:33 PM
Shendare
Dragon
 
Join Date: Apr 2009
Location: California
Posts: 814
Default

I can see where you're coming from, wanting to take advantage of what the various employees and volunteers have learned about client/server communications over the years of EQ's and EQEmu's development, while hopefully avoiding the pitfalls that come from so many different people with different ways of thinking working on it over time.
Reply With Quote
Reply

Tags
network, server


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 01:00 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3