Skip to content

Commit 940b6c1

Browse files
committed
Code rework v2
1 parent bdbf62b commit 940b6c1

5 files changed

Lines changed: 23 additions & 19 deletions

File tree

ice-adapter/src/main/java/com/faforever/iceadapter/ice/peer/Peer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class Peer {
3838
private final boolean localOffer; // Do we offer or are we waiting for a remote offer
3939
private final int preferredPort;
4040
private final int lobbyPort;
41-
private Integer localPort;
41+
4242
private boolean allowHost = true;
4343
private boolean allowReflexive = true;
4444
private boolean allowRelay = true;
@@ -51,7 +51,7 @@ public class Peer {
5151

5252
public volatile boolean closing = false;
5353

54-
private DatagramSocket faSocket;
54+
private volatile DatagramSocket faSocket;
5555

5656
private volatile KeepAliveStrategy keepAliveStrategy;
5757
private volatile Agent agent;
@@ -70,6 +70,10 @@ public class Peer {
7070
// Future handle for the FA listener task so we can cancel it cleanly
7171
private volatile CompletableFuture<Void> faListenerFuture;
7272

73+
public Integer getLocalPort() {
74+
return faSocket != null ? faSocket.getLocalPort() : 0;
75+
}
76+
7377
public void initModules(IceAsync iceAsync) {
7478
for (PeerModule module : PeerModule.getSortedModules()) {
7579
modules.putIfAbsent(module, module.createModule(new Pair<>(this, iceAsync)));

ice-adapter/src/main/java/com/faforever/iceadapter/ice/peer/modules/FASocketModule.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.faforever.iceadapter.ice.peer.Peer;
55
import com.faforever.iceadapter.util.DatagramSocketUtils;
66
import com.faforever.iceadapter.util.LockUtil;
7-
import lombok.Getter;
87
import lombok.RequiredArgsConstructor;
98
import lombok.SneakyThrows;
109
import lombok.extern.slf4j.Slf4j;
@@ -18,8 +17,6 @@ public class FASocketModule implements ModuleBase {
1817
private static final String LOCK_MODULE = "FASocketModule";
1918

2019
private final Peer peer;
21-
@Getter
22-
private DatagramSocket socket;
2320

2421
@Override
2522
public void start() {
@@ -39,7 +36,6 @@ private DatagramSocket initForwarding(int port, Integer localPort) {
3936
}
4037
DatagramSocket socket = new DatagramSocket(port);
4138
DatagramSocketUtils.resizeBuffer(socket);
42-
peer.setLocalPort(socket.getLocalPort());
4339
log.debug("Now forwarding data to peer {} on port {}", peer.getPeerIdentifier(), peer.getLocalPort());
4440
return socket;
4541
} catch (SocketException e) {
@@ -52,18 +48,21 @@ private void checkSocket() {
5248
if (peer.isClosing()) {
5349
return;
5450
}
51+
DatagramSocket socket = peer.getFaSocket();
5552
if (socket == null || socket.isClosed()) {
5653
log.error("Socket {} is null or closed", peer.getPeerIdentifier());
5754
try {
5855
log.warn("Trying to connect to FA for {}", peer.getPeerIdentifier());
5956
socket = initForwarding(peer.getPreferredPort(), peer.getLocalPort());
57+
peer.setFaSocket(socket);
6058
} catch (Exception e) {
6159
log.error("Could not connect to FA for {}", peer.getPeerIdentifier(), e);
6260
}
6361
}
6462
}
6563

6664
private void stopSocket() {
65+
DatagramSocket socket = peer.getFaSocket();
6766
if (peer.isClosing() && socket != null && !socket.isClosed()) {
6867
socket.close();
6968
socket = null;

ice-adapter/src/main/java/com/faforever/iceadapter/ice/peer/modules/FaToPeerModule.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.faforever.iceadapter.ice.ModuleBase;
44
import com.faforever.iceadapter.ice.peer.Peer;
5-
import com.faforever.iceadapter.ice.peer.PeerModule;
65
import com.faforever.iceadapter.util.LockUtil;
76
import lombok.RequiredArgsConstructor;
87
import lombok.extern.slf4j.Slf4j;
@@ -11,7 +10,6 @@
1110
import java.net.DatagramPacket;
1211
import java.net.DatagramSocket;
1312
import java.net.SocketException;
14-
import java.util.Optional;
1513
import java.util.concurrent.ExecutorService;
1614
import java.util.concurrent.Executors;
1715
import java.util.concurrent.Future;
@@ -58,13 +56,14 @@ private void stopListeners() {
5856
* This method get's invoked by the thread listening for data from FA
5957
*/
6058
private void faListener() {
61-
Optional<FASocketModule> socketModule = peer.getModule(PeerModule.FA_SOCKET_MODULE, FASocketModule.class);
62-
DatagramSocket socket = socketModule.map(FASocketModule::getSocket).orElse(null);
59+
6360
isRunning = true;
6461
while (!peer.isClosing()) {
62+
DatagramSocket socket = peer.getFaSocket();
6563
if (socket != null) {
6664
receiveCatch(socket);
6765
} else {
66+
log.error("Socket is null. Receive from FA skipped");
6867
break;
6968
}
7069
}

ice-adapter/src/main/java/com/faforever/iceadapter/ice/peer/modules/PeerToFaModule.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.faforever.iceadapter.ice.ModuleBase;
44
import com.faforever.iceadapter.ice.PeerEventListener;
55
import com.faforever.iceadapter.ice.peer.Peer;
6-
import com.faforever.iceadapter.ice.peer.PeerModule;
76
import com.faforever.iceadapter.util.LockUtil;
87
import lombok.RequiredArgsConstructor;
98
import lombok.extern.slf4j.Slf4j;
@@ -13,7 +12,6 @@
1312
import java.net.DatagramSocket;
1413
import java.net.InetAddress;
1514
import java.net.UnknownHostException;
16-
import java.util.Optional;
1715

1816
import static com.faforever.iceadapter.ice.peer.modules.FaToPeerModule.COMMAND_FA;
1917

@@ -55,15 +53,17 @@ public void onIceDataReceived(Peer peer, byte[] data, int offset, int length) {
5553
}
5654

5755
if (data[0] == COMMAND_FA) {
58-
getSocketAndTrySend(data, offset, length);
56+
getSocketAndTrySend(data, 1, length - 1);
5957
}
6058
}
6159

6260
private void getSocketAndTrySend(byte[] data, int offset, int length) {
63-
Optional<FASocketModule> socketModule = peer.getModule(PeerModule.FA_SOCKET_MODULE, FASocketModule.class);
64-
socketModule.map(FASocketModule::getSocket).ifPresent(socket -> {
65-
lockAndSend(socket, data, offset, length);
66-
});
61+
DatagramSocket socket = peer.getFaSocket();
62+
if (socket == null) {
63+
log.error("Socket is null. Send to FA skipped");
64+
return;
65+
}
66+
lockAndSend(socket, data, offset, length);
6767
}
6868

6969
private void lockAndSend(DatagramSocket socket, byte[] data, int offset, int length) {

ice-adapter/src/main/java/com/faforever/iceadapter/services/impl/ConnectServiceCommon.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
import com.faforever.iceadapter.util.LockUtil;
1313
import lombok.RequiredArgsConstructor;
1414
import lombok.extern.slf4j.Slf4j;
15-
import org.ice4j.ice.*;
15+
import org.ice4j.ice.Agent;
16+
import org.ice4j.ice.Component;
17+
import org.ice4j.ice.IceMediaStream;
18+
import org.ice4j.ice.KeepAliveStrategy;
1619
import org.ice4j.ice.harvest.StunCandidateHarvester;
1720
import org.ice4j.ice.harvest.TurnCandidateHarvester;
1821
import org.ice4j.security.LongTermCredential;
@@ -76,7 +79,6 @@ protected void createAgent(Peer peer) {
7679
Agent agent = new Agent();
7780
agent.setControlling(peer.isLocalOffer());
7881

79-
agent.setNominationStrategy(NominationStrategy.NOMINATE_FIRST_HOST_OR_REFLEXIVE_VALID);
8082
peer.setAgent(agent);
8183
peer.setMediaStream(agent.createMediaStream(FAF_MEDIA_STREAM));
8284
}

0 commit comments

Comments
 (0)