Skip to content

thisdotrob/rust-uo-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust UO Server

This is an implementation of an Ultima Online server I've been building whilst learning Rust. I'm using it as a playground for things I've learnt and want to put into practice, and also to work out how to tackle some hard problems in Rust.

Ultima Online (UO) is a fantasy massively multiplayer online role-playing game (MMORPG) originally released in 1997. There are still official servers run by Broadsword, running a closed-source implementation. There are also a large amount of free to play servers that run on open-source, community built server implementations such as this one which emulate the behaviour of the official servers. The most popular implementations are written in C#. As far as I'm aware there aren't any existing Rust implementations. I'm hoping that my implementation will provide at least some interesting benchmarks, if not a server implementation that is adopted by the community and prolongs the life of a game that I love.

I have been documenting my progress on my public journal - see all posts tagged "UO server project". They cover my thoughts on how I've architected the server, the design decisions and some code walkthroughs.

Progress & next tasks

The following list obviously isn't a complete list of tasks, just those I've completed so far and the ones I think would be most interesting and useful to tackle next:

  • Basic timer logic (1df6c58)
  • Add CLI to trigger test timers (dd9ab54)
  • Refactor timer logic (3dc6e81, a21b024, ee83e96, 66cd327)
  • Explore approaches to adding callbacks to timers and making them multi-threaded (fe86c53, 161cd3c, 25774cd, 5553241)
  • Basic TCP connection handling (a1744e4, 95fdea7, 44f855b, 7bbb24a)
  • Receive, parse and respond to login and shard selection packets from game client (a1744e4, 9964692, d484f7c, 8f98387)
  • Non-blocking connection handling to allow multiple clients (98c3641, 1af0e99, 03042d8, 26970df)
  • Packet compression for "in-game" packets (0b1e8f6)
  • Refactor compression interface and module structure (08265ac, 10a5f61)
  • Refactor TCP module - extract sub modules and write tests (acac0ed)
  • Finalise design of timer logic then add tests and documentation
  • Store connection state and associate it with timers
  • Receive, parse and respond to initial "in-game" packets
  • Load game world state on server startup
  • Save game world state to DB at intervals

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages