Skip to content

slonopotamus/Atto

Repository files navigation

Atto Server

Atto is an Unreal Engine plugin that implements a minimalistic backend / meta service.

Important
Atto is not intended for high-load production use. Also, Atto server API can be exploited to break things. Project goal is just to have a meta service for early game development.

Atto aims to be fully compatible with Unreal Engine Online Subsystems, so you should not need to write Atto-specific code in your game. If you do have for some reason, either you’re using OSS API wrong, or there could be a bug in Atto. If you’re sure it’s the latter, consider reporting it to Atto issue tracker.

Dependencies

This project relies on C++20 features. Tested against Unreal Engine 5.5.

Features

  • Auto-starts in editor, so it is immediately available for PIE

  • Provides online subsystem implementation

  • Zero cloud dependencies

  • Absolutely free and open-source

Supported Online Subsystem interfaces

  • Identity. Authentication is just a stub, it accepts any login/password pair if they are equal.

  • Sessions: create, start, end, destroy, find, start/cancel matchmaking

  • Time service

Futher development ideas

  • Persistent data storage

  • Implement more OSS interfaces

  • Add OnlineServices implementation

  • Add API for game-specific logic

Command-line options

-DisableAttoServer

Disables Atto server in cases where it would normally start (for example, in editor).

-EnableAttoServer

Enables Atto server in cases where it would normally not start (for example, game client)

-AttoListenPort=27777

Specifies network port for Atto server

-AttoBindAddress=0.0.0.0

Specifies bind address for Atto server

-AttoUrl=ws://localhost:27777

Specifies Atto server address to connect to

-AttoPublicAddress=<ip_address>

When creating online session, this parameter allows specifying which IP address it will announce for incoming connections

-AttoPublicPort=<port>

When creating online session, this parameter allows specifying which network port it will announce for incoming connections

Usage scenario

Suppose, you want to start a separate Atto server, connect one or more dedicated servers to it and one or more game clients.

Now, start Atto server:

$ ./Binaries/<PLATFORM>/<PROJECT_NAME>Server AttoServer -EnableAttoServer -log

You may pass additional command-line options to configure it.

Verify that Atto server is listening to incoming connections by looking for a relevant log entry:

LogAtto: Atto Server started accepting connections on :27777

Next, start dedicated server instance:

$ ./Binaries/<PLATFORM>/<PROJECT_NAME>Server <YOUR_GAME_MAP> -AttoUrl=ws://localhost:27777 -log

Atto plugin provides a reference AttoGame map with BP_AttoGame game mode that uses AttoGameSession class. AttoGameSession auto-creates online session when map is loaded and destroys when map is unloaded. Alternatively, you will need to manage online session in your game code.

You might need to alter -AttoUrl=…​ argument if your Atto server is running on a different port or machine.

Ensure that dedicated server has properly connected to Atto server and created online session by looking for a relevant entry in dedicated server logs:

LogOnline: OSS: Atto server url: ws://localhost:27777
LogOnline: OSS: Created online subsystem instance for: Atto
LogOnline: OSS: TryLoadSubsystemAndSetDefault: Loaded subsystem for type [Atto]
...
LogAtto: Creating game session: GameSession
LogAtto: OnCreateSessionComplete GameSession bSuccess: 1

Finally, start your game client:

$ ./Binaries/<PLATFORM>/<PROJECT_NAME> -AttoUrl=ws://localhost:27777

You might need to alter -AttoUrl=…​ argument if your Atto server is running on a different port or machine.

Ensure that client has properly connected to Atto server by looking for a relevant entry in client server logs:

LogOnline: OSS: Atto server url: ws://localhost:27777
LogOnline: OSS: Created online subsystem instance for: Atto
LogOnline: OSS: TryLoadSubsystemAndSetDefault: Loaded subsystem for type [Atto]
...
LogOnline: OSS: Successfully logged into Atto server, userId=<value>

What’s next?

You can use AdvancedSessions plugin or built-in Online Subsystem blueprint nodes or just use OnlineSubsystem from C++.

Why not just use Steam OSS?

  • Because it doesn’t allow to run multiple game instances on the same computer simultaneously

  • Because it expects dedicated server to have public IP address

  • Because it is nontrivial to run multiple dedicated servers on the same machine

  • Because it doesn’t work in PIE

About

Minimalistic backend service for Unreal Engine, made with Unreal Engine

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors 2

  •  
  •