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.
- 
Auto-starts in editor, so it is immediately available for PIE
 - 
Provides online subsystem implementation
 - 
Zero cloud dependencies
 - 
Absolutely free and open-source
 
Put Atto plugin into Plugins directory of your game.
Set Atto as default online subsystem:
[OnlineSubsystem]
DefaultPlatformService=AttoAdd login credentials for PIE:
[/Script/OnlineSubsystemUtils.OnlinePIESettings]
bOnlinePIEEnabled=True
+Logins=(Id="user1",Type="Atto",TokenBytes=(227,203,173,173,239,219,173,172,239,143,173,222,239,0,0,0))
+Logins=(Id="user2",Type="Atto",TokenBytes=(227,203,173,173,239,219,173,172,239,140,173,222,239,190,173,222))
+Logins=(Id="user3",Type="Atto",TokenBytes=(227,203,173,173,239,219,173,172,239,141,173,222,239,0,0,0))
+Logins=(Id="user4",Type="Atto",TokenBytes=(227,203,173,173,239,219,173,172,239,138,173,222,239,190,173,222))- 
Persistent data storage
 - 
Implement more OSS interfaces
 - 
Add OnlineServices implementation
 - 
Add API for game-specific logic
 
-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
 
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 -logYou 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 -logAtto 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:27777You 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++.