I got really interested in networking during the networking course, so I decided to do my specialization in it.
At first, I had a hard time deciding what direction to take, but my educator suggested looking into Star Citizen’s server meshing. After doing some research, it sounded like a fun and interesting subject to explore and try to implement.

So I chose to focus my specialization on server meshing and ownership transfer between servers. The goal was that if two players are on different servers, they should still be able to see each other and potentially interact.

For this project, I implemented player transfer between servers, where clients can move across server boundaries and have their ownership transferred to another server.

Preparations

I knew I had to do quite a lot of architecture work to get something working in a satisfactory way.

I looked at Star Citizen’s roadmap to get an idea of what would be needed for a working prototype, and then I started working on my class diagram. We had a course were we had to use class diagrams in group project 3 but have never really used it in other projects. I thought it would be useful to make one to get an overview of what I needed and how I could structure it.

It also gave me the overview to notice when something felt wrong or when something needed to change.

I also started planning how to handle server ownership transfer and what data would be required to handle ownership changes.


The stream works like a routing layer. It takes input from a client, checks which server it should go to, and sends the message to that server. On the server side, it receives messages and forwards them to the clients that need that data.

Because I had already implemented my network interface, it was very simple to get the servers and clients up and running. The main difference was that both the client and server now acted as nodes connected to the entity stream.

Clients and servers both act as nodes, and the entity stream determines whether something is treated as a client or a server based on the initial connection message.



I managed to get the server ownership and transfer protocols working as I intended. There are still areas I would like to improve or expand on, such as player interactions across servers, moving to a quadtree system to divide the world into server regions, and more.

Scroll to Top