I am currently facing some difficulties using the OnlineBeacons, which are very sparsely documented.
I am in the process of building a login queue for our unreal server as the server doesnt seem to handle multiple simultaneous login attempts very well. The server rejects (without any ErrorMessage) any login attempts past the first two.
So the goal is instead of letting the users login immediatly they first get put onto a queue using the OnlineBeacons.
The flow of the system i build looks something like this:
*=2]-> No -> give login permission to next client (RPC through beacon) *=2]-> Yes -> Do Nothing / Wait
OnClientConnected -> PutClientOnQueue
OClientDisconnected -> RemoveClientFromQueue
Client: Wants to Login -> Create BeaconClient
Has gotten Login permissions -> Open Level / Login
With the system i build the Server Crashes though with 2 Clients trying to connect at the same time. The Crash does not happen though if I add another HostBeaconObject to the BeaconHost.
Am i correctly assuming that each BeaconHostObject can only handle a single connection? And that i need to have a BeconHostObject for each client that would want to connect simulteanously?
If so, is there a limit as to how many simulteanous connections a single server can handle via the Beacons? And can i prevent/reject the connection of new Beacons/Clients if there are no BeaconHostObjects available?
I would really appreciate any insight in the OnlineBeaconSystem and hope to find some answers here.
Thanks in advance!
You only need one beacon host object. Can it handle multiple connection requests coming in at the same time? I don’t really know, never had a situation like this, but I assume it has to be able to? Seems like a trivial thing lol. Unfortunately I’m not familiar with master servers so I can’t give advice on that. Can you go into a bit more detail on how you set up your beacons? Maybe you are missing a function call.
The Beacon Client only has a Start Method wich initializes the Beacon via InitClient(url) using the URL to the server (currently im testing on lokalhost) and the port i configured in the DefaulEngine.ini.
The rest of the Beacon Client are just RPC for when the beacon is actually connected.
The Host also has a *Start() *which initializes the host via InitHost(). I add the HostObjects via a Blueprint exposed Method AddHost() which just calls *RegisterHost() *with the passed in Host Object.
On the HostObject i override SpawnBeaconActor but for now just call Super::SpawnBeaconActor in it with my custom Beacon Client. *OnClientConnected is also override but i also call the Super function with some additional stuff to let the ClientBeacon know that its now connected and can start sending RPCs. In the constructor of the HostObject i set the ClientBeaconActorClass *and BeaconTypeName to match my BeaconClient.
I think thats mostly it for the connection stuff. The rest are just some Multicast Delegates for me to subscribe on in Blueprint.