Creating your own Online SubSystem...

So we have a couple of Online SubSystems - Steam, Null, etc.

How does one go about creating your own Online SubSystem?

I have done some searching and haven’t really found any definitive information on the subject. The problem with Null is that it only works on the LAN because of UDP and I am probably not going to go the Steam route. So my idea is to create my own Online SubSystem. I know the basic theory about it, a master server somewhere that is queried by clients wanting to play on the Internet … this returns a list of live servers … player clicks one and joins.

I have found all this documentation:

OnlineSubsystem
IOnlineSubsystem

Online Subsystem Overview

Online Subsystem Types

Can the Epic Devs point me to some documentation or in the right direction to be able to do this.

Thanks.

3 Likes

It won’t be a easy task (I did it partially).

You need to create your own OSS module and implement all the interfaces that you want to use. In the class implementation, you have to create the logic to call your backend server and retrieve the data / map them in a way to respect the current Interface definition.
If you miss some function you need to add them, set them as “exportable” by addin MyOSS_API in front of the function and you will be albe to call them from your game module.

To start, I would suggest to take the null implementation (as it did nearly nothing in most of the case) so you will have the backbone of the code and do the interface one by one.

Good luck as it’s clearly not straightforward. Be aware that depanding of the interfaces/function the Delegate management is not handled in the same way so you need to be familiar with this!

Yeah, definetely not an easy task but completely doable. I’m in the middle of the same proccess right now and the end is yet to be seen :slight_smile:

My advice is to start with a couple of interfaces (mostly you’ll need Sessions and Identity for some basic framework) and then expand from there. And of course use the Null subsystem as a reference, you can get lots of “ready-to-go” code from there.

Good luck! :slight_smile:

Thanks guys for the info … it has been a lot of help.

I guess for now I will just go with a simple master server and game server heartbeat design to get things going. We will probably go online with Steam in the long run, but during the Alpha I don’t think it is worth doing that.

Thanks again for the info. 8-}

Hey any luck implementing your own custom OnlineSubsystem module?

I copy/pasted the Null system into ShooterGame and trying to rename it to my own ‘Custom’ class but I’m finding a lot of issues with header files being unable to be found.

That is not the correct way to do it … you need to change the C++ source code … so that is why you are getting the errors.

As for my own system, we are now looking at using Steam instead of our own system, this allows us to leverage the Steam community instead of trying to re-invent the wheel.

Yea I am implementing each of the functions to talk to/from Parse.com to update/get the list of servers

Not entirely sure how to go about setting up the OnlineSubsystem module, do I follow the documentation outlined here Gameplay Modules | Unreal Engine Documentation

or is there a different approach for OnlineSubsystems?

edit: I was finally able to get this to work in a seprate module. Once its cleaned up I’m hoping I’ll have time to share my solution

2 Likes

Hi can you share with me your solution. I’m current making my own subsystem also.

Bumping this as I’m about to do the same.

Hey, will you be able to share the solution?

Hi!,

I’m working on VizArch presentations, I’m looking for a way to connect online a few (2 or 3) clients in the same visualization; seems I need to use steam or similar or create my own OSS, so I’m looking about it, but seems much more complex than what I can do.

Can I ask any who have solved it before to PM me with a quotation for his help? Thanks!

But what if you want to deploy you game in another platform which does not supported by Unreal OnlineSubsystem?