|
You last visited: Today at 23:50
Advertisement
Chimera Private Server Development
Discussion on Chimera Private Server Development within the CO2 Private Server forum part of the Conquer Online 2 category.
10/01/2016, 02:55
|
#1
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Chimera Private Server Development
Introduction
Chimera is a Conquer Online private server project written in Go. Roughly half a decade ago when I first began programming in a managed language, I grossly underestimated the requirements for developing such a project. I was unprepared for developing a server which could meet the performance requirements of my planned systems. Half a decade later, I look back at my old prototypes and miss the development scene. I have challenged myself again with the same goals for developing a high-performance Conquer Online server, though a lot as changed in regards to my design and choice in technology.
Where to read more
If you're interested in this project, check out for more information about my server architecture and packet system. I put a lot of work into this already, and I'm really excited to get back into development again. If you have questions, please don't hesitate to ask or make conversation; however, bashing on the Go language will not be welcomed criticism. There is no benefit to starting argumentation on language preference (there's a section for that here, and this is not the section).
Blog Link:
Thanks, and I'll be posting about more development soon.
|
|
|
10/22/2016, 02:18
|
#2
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Account Server Completed
I recently completed the account server, and will be moving on to the game and map server shortly. In this post, I mostly discuss how Chimera protects users, deals with passwords, and authenticates players for the game server. I also recently reviewed my plans for the game server, and expanded on a few definitions for how the map server will interact with the game server. I'll be working on that next. You can read more about authentication here:
|
|
|
11/01/2016, 17:05
|
#3
|
elite*gold: 0
Join Date: May 2006
Posts: 113
Received Thanks: 60
|
Super nice to see you around buddy - even if we are both looking to run a new project.
|
|
|
11/02/2016, 08:45
|
#4
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Login Sequence Designed
I decided to create a quick flowchart this evening to define how the game server and map server interact with the login sequence. This was just a brainstorming exercise for helping me commit to my originally proposed server architecture (ensuring that it should work in practice).
See the flowchart on my blog:
Quote:
Originally Posted by EliteMagus
Super nice to see you around buddy - even if we are both looking to run a new project.
|
Thanks, I'll do my best to keep up with project development.
|
|
|
11/02/2016, 14:42
|
#5
|
elite*gold: 200
Join Date: Sep 2011
Posts: 202
Received Thanks: 107
|
I've been following this on your board =P
Best of luck !
|
|
|
11/04/2016, 06:51
|
#6
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Quote:
Originally Posted by Nyorai
I've been following this on your board =P
Best of luck !
|
It's not my board, but thank you. I'm glad I'm not working in C anymore like I was before. It's a great language, but definitely not for a large distributed system. Modern languages like Go really shine in this case, and I've really enjoyed working on the project so far. Hopefully I'll get to work on this more once midterms are over.
|
|
|
11/04/2016, 12:41
|
#7
|
elite*gold: 200
Join Date: Sep 2011
Posts: 202
Received Thanks: 107
|
Quote:
Originally Posted by Spirited
It's not my board, but thank you. I'm glad I'm not working in C anymore like I was before. It's a great language, but definitely not for a large distributed system. Modern languages like Go really shine in this case, and I've really enjoyed working on the project so far. Hopefully I'll get to work on this more once midterms are over.
|
I know the feeling. Thankfully I won't have more midterms ever again =P Just my thesis dissertation left to do (dunno which is worse tho) !
Anyways, keep it up ! I'll be checking the progress every now and then !
|
|
|
12/07/2016, 05:59
|
#8
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Go in Server Development
I was requested to discuss some of the advantages I saw with using Go in server development. I had some time taking a break from finals and decided to finish the article. It primarily talks about my decision and considerations for using the language. Just to clarify, this thread is not about Go in specific, so please don't post argumentation here. PM me or post on the article and I'd be happy to reply.
You can read the article here:
In addition, I've been working on some RPC servers and clients between the servers (and between studying), and I refactored some of my code involving big integers (adding big numbers as a byte ordering rule for my NetDragon packet encoder). More development is coming soon - I love working on this project and can't wait to be done with the fall quarter.
|
|
|
03/07/2017, 07:53
|
#9
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Just a small update before I post a larger update in a month or two...
Things are slow due to academic project work.. I don't know why I took on 3 project courses this quarter.
I completed server routing for transferring player data to the map server. When a player logs in, the account server sends a request to the game server for character information and routing. Once the character is pulled from the database and a route is determined for the respective map server, it generates a cryptographically safe random token and sends it to the account server and map server for login. The token is validated on the map server, and the first packet is received (I have cryptography and the DH key exchange working). And now I'm working on the new role screen. I also rewrote the project to match a lot of go's expected package structuring. More to show soon... after this winter quarter is done.
|
|
|
04/07/2017, 15:23
|
#10
|
elite*gold: 0
Join Date: Apr 2014
Posts: 13
Received Thanks: 5
|
Are you about to open a server?
|
|
|
04/07/2017, 18:05
|
#11
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Quote:
Originally Posted by iHeisenberg
Are you about to open a server?
|
No. Chimera is a development and will be for a long time.
It's nowhere close to being a public server.
|
|
|
04/07/2017, 18:07
|
#12
|
elite*gold: 0
Join Date: Sep 2011
Posts: 17
Received Thanks: 4
|
Interesting.
the way you think or code is much alot different from what i have known or seen in 7 years wasted in playing co or pservers dev/edit till now.
|
|
|
04/08/2017, 11:33
|
#13
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Quote:
Originally Posted by [V.I.P]Coder[PM]
Interesting.
the way you think or code is much alot different from what i have known or seen in 7 years wasted in playing co or pservers dev/edit till now.
|
I wouldn't call it wasted time, as long as you enjoy the time you're putting into it.
|
|
|
10/14/2017, 05:20
|
#14
|
elite*gold: 12
Join Date: Jul 2011
Posts: 8,211
Received Thanks: 4,114
|
Introduction
Without going into excuses about my extended absence, I completed the login sequence for Chimera a few months back and then left it "as-is". This post is just to let you know that I started development on Chimera again. After speaking with a member of the development community, I got some revived interest in developing a Conquer Online server, for better or for worse.
Revision
When I left off, I had a serious performance problem with the packet system that I was struggling to find a clean solution for. When decoding client data, I used reflection and TQ's byte ordering rules to populate a packet structure. This resulted in roughly 300 ns per decode. My plan is to replace the reflection system with a stream system to reduce this time (will retest). Decoding would then be as simple as accepting a byte.Buffer as a packet.Reader, and then using methods to manually decode the structure. Something like this:
Code:
// Reader encapsulates a byte buffer, used by packet structures to dynamically
// decode client data using TQ Digital's byte ordering rules. The base buffer
// can be assigned directly from the client's data response.
type Reader struct {
bytes.Buffer
}
I'd use the same interfaces that I did before, but have it pass the bytes.Buffer down from the server events rather than passing the byte array. When encoding, I'd do the same thing - returning a bytes.Buffer rather than an array (just to create another byte.Buffer again). Hopefully that makes sense.
Conclusion
Point being that I have interest to keep this project going and to make it more performant before really developing up Conquer's subsystems. I want to make this project as easy to develop for and understand as possible, and work with others in the community to develop tools and resources needed for Conquer development. The wiki is also back up if you'd like to contribute. Cheers.
|
|
|
10/14/2017, 06:14
|
#15
|
elite*gold: 0
Join Date: Jul 2009
Posts: 7
Received Thanks: 1
|
how long it takes untill we see your project in beta or alpha
|
|
|
All times are GMT +2. The time now is 23:50.
|
|