disconnect 30 minutes into every single game

This is for troubleshooting of problems with the FAF client and Forged Alliance game.

Moderator: DukeOfEarl

disconnect 30 minutes into every single game

Postby debtslave » 05 Nov 2018, 13:13

Hi all, I am posting this here, to see if it might be useful to others with the same issue.

Basically my games go well, but after 10-30 minutes, it shows a screen that 1 player has disconnected. after 2 minutes they are kicked. It shows that the established connection has been cut between my pc and another pc.

This is most likely caused by ISP's using CGNAT.

You might say, try ICE-Adapter. It is basically a Application, that takes all FAF Game data, and uses a WebRTC p2p library, to connect to peers.
This most likely will not fix my problem, as I have no trouble connecting to peers, but trouble with established connections getting cut.



So my solution is to force the FA Forever client to use a relay server, and force NO direct connections.

The FA Forever Relay server is: 148_251_238_131

To do this I created 4 windows firewall rules:
0. Block all Inbound, Block all Outbound
1. Inbound Rule > Allow, TCP, C:\Program Files (x86)\Forged Alliance Forever\FAForever.exe, Scope:148_251_238_131
2. Inbound Rule > Allow, UDP, C:\Program Files (x86)\Forged Alliance Forever\FAForever.exe, Scope:148_251_238_131
3. Outbound Rule > Allow, TCP, C:\Program Files (x86)\Forged Alliance Forever\FAForever.exe, Scope:148_251_238_131
4. Outbound Rule > Allow, UDP, C:\Program Files (x86)\Forged Alliance Forever\FAForever.exe, Scope:148_251_238_131

Then I launched ColaSoft-Capsa11Free to verify that only packets to 148_251_238_131 are occurring.
Blocked packets can also be seen at System32\LogFiles\Firewall\pfirewall.log.


So I created a test game, FinFin joined, and we played for 5 minutes with no direct connection, and my ping was much improved at 300.

If anyone else wants to try RELAY ONLY connections, this might be a good way to disable P2P direct connections.


If it works for you, please share your results.
debtslave
 
Posts: 3
Joined: 05 Nov 2018, 12:45
Has liked: 0 time
Been liked: 0 time
FAF User Name: debtslave

Re: disconnect 30 minutes into every single game

Postby Geosearchef » 05 Nov 2018, 13:51

The ICE adapter will extremly likely fix your problem as it would detect the lost connection, attempt to reconnect and in case it doesnt work fall back to a relay candidate.

The solution you've presented here is indeed working, I have been privately telling this to people with constant connection problems aswell, there is only the small problem that it costs FAF money if a lot of people do that, so we might delete this thread.

(Btw., ice adapter uses no webrtc anymore ;) )
Developer, currently working on ICE adapter, Java Client (downlords's client), java api/server.
User avatar
Geosearchef
Avatar-of-War
 
Posts: 112
Joined: 18 Oct 2013, 14:08
Location: Germany
Has liked: 1 time
Been liked: 25 times
FAF User Name: Geosearchef

Re: disconnect 30 minutes into every single game

Postby debtslave » 06 Nov 2018, 12:33

Thank you for your reply.

Looking at the github page for Ice-Adaptor project, it shows it depends on libwebrtc. (located https://github.com/FAForever/ice-adapter)
What library is it using now?

The big issue with Ice-Adaptor is that the 2 main clients have no simple way to host a game using IceAdaptor.
It could be as simple as a checkbox, and the game name could be prefixed with ICE.

Secondly, I can see d0wnlord client includes faf-ice-adapter.exe, so I would assume that the clients could already transparently launch ice-adaptor to join ICE games.

Sorry that I cannot contribute to development, as I am a C and Javascript dev, and OO looks like spaghetti to me.
debtslave
 
Posts: 3
Joined: 05 Nov 2018, 12:45
Has liked: 0 time
Been liked: 0 time
FAF User Name: debtslave

Re: disconnect 30 minutes into every single game

Postby Geosearchef » 06 Nov 2018, 14:55

The old (3rd) ICE adapter was written by muellni in c++, that's the ice-adapter repo. I don't understand that one either.

I have written a test server and client for debugging the adapter and after a few months of runnikg tests we finally got it working. Everything seems to be fine, it only slows down the game on slower connections. This is due to WebRTC enforcing SRTP (if I remember correctly) with DTLS 1.2 encryption. This get's an issue as FA is sending between 15-45 bytes per packet (on average) therefore with DTLS 1.2 (27 byte overhead) effectively doubling the required bandwidth.

I therefore rewrote the adaptee using a different library, in this case ice4j using Java. The adapter can be found in the FAForever/java-ice-adapter repository. Currently it looks extremly promising, there are just some problems with the python server/client.

There is also a java-ice-adapter branch in the java client using this adapter. Running two different connectivity solutions at the same time as been decided to be to complicated.

Both clients do already support ICE in a different build when connecting to a server supporting ice (e. g. test.faforever.com).

If you are interested in contributing to FAF please tell me, there are a lot of different sub projects in FAF, from reverse engineering over UID (C), all the java projects (java client (downlords client), java server, api), python client and server, python replay server to game coding (lua) and the website, discord bot, unit db and faf tools (all JS). Also the galactic war (web) frontend may need help soon.
Developer, currently working on ICE adapter, Java Client (downlords's client), java api/server.
User avatar
Geosearchef
Avatar-of-War
 
Posts: 112
Joined: 18 Oct 2013, 14:08
Location: Germany
Has liked: 1 time
Been liked: 25 times
FAF User Name: Geosearchef

Re: disconnect 30 minutes into every single game

Postby debtslave » 09 Nov 2018, 11:00

Hi, thank you for pointing me to Ice-Adaptor Java Repo. I installed NetBeans, Gradle Plugin, Jdk, and built client-1.0-SNAPSHOT.jar.
I made a run.bat with following content "E:\jdk\bin\java.exe -jar client-1.0-SNAPSHOT.jar" --help

It failed with:
"Exception in thread "main" java.lang.NoClassDefFoundError: net/ScenarioOptionsMessage at client.TestClient.<clinit>(TestClient.java:31)"

I was therefore unable to host my own Ice-Adaptor game.

I eventually found a forum post:
https://forums.faforever.com/viewtopic.php?f=45&t=16844

It says a special client has to be used:
https://github.com/muellni/client/relea ... -win32.msi


However this means any game hosted will not be visible by the public, and only developers?


Maybe it would be possible to create a mod, named "ice4", which would include the faf-adaptor-proxy.exe, therefore making the game visible to public, as well as allowing public to connect, as they would automatically download mod files?
debtslave
 
Posts: 3
Joined: 05 Nov 2018, 12:45
Has liked: 0 time
Been liked: 0 time
FAF User Name: debtslave

Re: disconnect 30 minutes into every single game

Postby Geosearchef » 09 Nov 2018, 14:34

The client you tried to build is a simple test client that manages the ice adapter, emulates the games network behaviour, tests it and sends all logging data to the server. The server software used with this is the server project in the repo you cloned. It is just intended for testing the ICE adapter. It has nothing to do with FAF, it doesn't launch the game, it 's just for isolating and running automated tests on the ice adapter without users having to do anything or having to send logs/tell what they see.

If you want to play with the adapter you will have to run an actual FAF client that supports the ICE adapter (and includes an actual build of the java-ice-adapter repo -> ice-adapter project). Downlords client currently does that using the java-ice-adapter branch. There is also a build of 0.9.0-beta-RC8, but it's marked as a draft so not visible. I also don't know if everything is running on the java test server(downlord's server running the faf-java-server).

The FAF test server is currently running the python server with an ICE branch I think, but afaik the java-api is currently somewhat broken, so the java client (downlords client) won't be able to connect.

You should though be able to use the python client with an ice branch (the release you linked should work). It should connect to the test server, log in using an existing FAF user account and any pw.

It is not possible to run ICE and non ICE clients on the same server at the same time as it requires support from the server. (not just the ICE adapter, deactivating the old connectivity code which is necessary for running with ICE breaks old non ICE clients)
There are some last issues to be investigated and we will be doing an public ICE test weekend on the production server soon. (switching the entire server to ICE only)

Why do you need it/what are you trying to achieve?
Developer, currently working on ICE adapter, Java Client (downlords's client), java api/server.
User avatar
Geosearchef
Avatar-of-War
 
Posts: 112
Joined: 18 Oct 2013, 14:08
Location: Germany
Has liked: 1 time
Been liked: 25 times
FAF User Name: Geosearchef

Re: disconnect 30 minutes into every single game

Postby SiN » 12 Nov 2018, 17:15

Well with original client i never had a connection loss to all players, with downlord his client in game already 2 times i lose conn to everyone while i am still in lobby and still can internet. This is weird. Not gone use the client anymore.
User avatar
SiN
Avatar-of-War
 
Posts: 176
Joined: 15 Sep 2011, 14:43
Has liked: 20 times
Been liked: 6 times
FAF User Name: PerfectNoob


Return to Tech Support

Who is online

Users browsing this forum: No registered users and 1 guest