Skip to content

Commit ebf5c0f

Browse files
Initial commit
1 parent 4008240 commit ebf5c0f

12 files changed

+256
-132
lines changed

src/main/java/com/example/webrtc/Main.java

+1-6
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@ public class Main {
99
public static void main(String[] args) {
1010
logger.info("Hello, World!");
1111

12-
try (WebRtcWebSocketClient client = new WebRtcWebSocketClient()) {
13-
logger.info("WebSocket client started.");
14-
15-
} catch (Exception e) {
16-
logger.error("Error:", e);
17-
}
12+
new WebRtcMediator(12345L).act();
1813

1914
// Wait for the application to finish
2015
try {

src/main/java/com/example/webrtc/MediaStreamManager.java

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public static String[] getAvailableUrls(String[] requestedUrls) {
1717
return requestedUrls;
1818
}
1919

20+
public static String[] getAvailableUrls(String payload) {
21+
return getAvailableUrls(getRequestedUrls(payload));
22+
}
23+
2024
public static Object getMediaStream(String[] availableUrls, String from) {
2125
throw new UnsupportedOperationException("Unimplemented method 'getMediaStream'");
2226
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.webrtc;
2+
3+
import dev.onvoid.webrtc.RTCConfiguration;
4+
5+
public class PeerConnectionManager {
6+
private PeerConnectionManager() {
7+
// Private constructor to hide the implicit public one
8+
}
9+
10+
public static void add(WebRtcWebSocketClient webSocketClient, RTCConfiguration config, String peer, String[] urls) {
11+
WebRtcPeerConnection peerConnection = new WebRtcPeerConnection(webSocketClient, config, peer, urls);
12+
}
13+
14+
}

src/main/java/com/example/webrtc/WebRTCPeerConnection.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
import dev.onvoid.webrtc.RTCConfiguration;
77
import dev.onvoid.webrtc.RTCPeerConnection;
88

9-
10-
public class WebRTCPeerConnection implements AutoCloseable{
11-
private static final Logger logger = LogManager.getLogger(WebRTCPeerConnection.class);
9+
public class WebRtcPeerConnection implements AutoCloseable {
10+
private static final Logger logger = LogManager.getLogger(WebRtcPeerConnection.class);
1211

1312
private final RTCPeerConnection peerConnection;
1413

15-
public WebRTCPeerConnection(RTCConfiguration config, String peer, String payload) {
16-
this.peerConnection = new PeerConnectionFactory().createPeerConnection(config, new WebRtcPeerConnectionObserver(peer));
14+
public WebRtcPeerConnection(WebRtcWebSocketClient webSocketClient, RTCConfiguration config, String peer,
15+
String[] urls) {
16+
this.peerConnection = new PeerConnectionFactory().createPeerConnection(config,
17+
new WebRtcPeerConnectionObserver(webSocketClient, peer));
1718
}
1819

1920
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.webrtc;
2+
3+
import org.apache.logging.log4j.LogManager;
4+
import org.apache.logging.log4j.Logger;
5+
6+
public class WebRtcMediator {
7+
private static final Logger logger = LogManager.getLogger(WebRtcMediator.class);
8+
private long id;
9+
10+
public WebRtcMediator(long id) {
11+
this.id = id;
12+
}
13+
14+
public void act() {
15+
try (WebRtcMessagingClient client = new WebRtcMessagingClient(id);
16+
WebRtcWebSocketClient socketClient = new WebRtcWebSocketClient(client.getMessageHandler())) {
17+
client.setWebSocketClient(socketClient);
18+
} catch (Exception e) {
19+
logger.error(e);
20+
}
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.webrtc;
2+
3+
public class WebRtcMessagingClient implements AutoCloseable{
4+
5+
private final WebRtcMessagingHandler messageHandler;
6+
7+
public WebRtcMessagingClient(long id) {
8+
messageHandler = new WebRtcMessagingHandler(id);
9+
}
10+
11+
@Override
12+
public void close() throws Exception {
13+
throw new UnsupportedOperationException("Unimplemented method 'close'");
14+
}
15+
16+
public WebRtcMessagingHandler getMessageHandler() {
17+
return messageHandler ;
18+
}
19+
20+
public void setWebSocketClient(WebRtcWebSocketClient socketClient) {
21+
messageHandler.setWebSocketClient(socketClient);
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.example.webrtc;
2+
3+
import org.apache.logging.log4j.LogManager;
4+
import org.apache.logging.log4j.Logger;
5+
6+
import com.example.webrtc.model.WebRtcSignalingMessage;
7+
import com.fasterxml.jackson.databind.DeserializationFeature;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
10+
import dev.onvoid.webrtc.RTCConfiguration;
11+
12+
public class WebRtcMessagingHandler {
13+
private static final Logger logger = LogManager.getLogger(WebRtcMessagingHandler.class);
14+
15+
private final RTCConfiguration config = new RTCConfiguration();
16+
private WebRtcWebSocketClient webSocketClient;
17+
private long id;
18+
19+
public WebRtcMessagingHandler(long id) {
20+
this.id = id;
21+
}
22+
23+
public void setWebSocketClient(WebRtcWebSocketClient webSocketClient) {
24+
this.webSocketClient = webSocketClient;
25+
}
26+
27+
public void handleMessage(WebRtcSignalingMessage message) {
28+
logger.info("Handling WebRTC signaling message from {} of type {} with payload: {}",
29+
message.getFrom(), message.getType(), message.getPayload());
30+
31+
// Handle the WebRTC signaling message
32+
switch (message.getType()) {
33+
34+
case CONFIG:
35+
handleConfigMessage(message);
36+
break;
37+
38+
case REGISTER:
39+
// REGISTER message not expected here
40+
logger.warn("Unexpected REGISTER message: {}", message);
41+
break;
42+
43+
case REQUEST:
44+
handleRequestMessage(message);
45+
break;
46+
47+
case RESPONSE:
48+
// RESPONSE message not expected here
49+
logger.warn("RESPONSE unexpected here: {}", message);
50+
break;
51+
52+
case OFFER:
53+
// This peer supposed to OFFER SDP, not expected here
54+
logger.warn("OFFER unexpected here: {}", message);
55+
break;
56+
57+
case ANSWER:
58+
handleAnswerMessage(message);
59+
break;
60+
61+
case CANDIDATE:
62+
handleCandidateMessage(message);
63+
break;
64+
65+
case ERROR:
66+
handleErrorMessage(message);
67+
break;
68+
69+
default:
70+
// Handle unsupported message types
71+
logger.warn("Unsupported message type: {}", message.getType());
72+
break;
73+
}
74+
}
75+
76+
private void handleErrorMessage(WebRtcSignalingMessage message) {
77+
}
78+
79+
private void handleCandidateMessage(WebRtcSignalingMessage message) {
80+
}
81+
82+
private void handleAnswerMessage(WebRtcSignalingMessage message) {
83+
}
84+
85+
private void handleRequestMessage(WebRtcSignalingMessage signalingMessage) {
86+
String peer = signalingMessage.getFrom();
87+
String[] urls = MediaStreamManager.getAvailableUrls(signalingMessage.getPayload());
88+
89+
try {
90+
webSocketClient.sendMessage(new WebRtcSignalingMessage(peer, urls));
91+
92+
if (urls == null || urls.length == 0) {
93+
logger.error("No available media stream URLs found");
94+
} else {
95+
logger.info("Available number of media stream URLs: {}", urls.length);
96+
newWebRtcClient(peer, urls);
97+
}
98+
} catch (Exception e) {
99+
logger.error("Error sending RESPONSE message: {}", e.getMessage());
100+
}
101+
}
102+
103+
private void newWebRtcClient(String peer, String[] urls) {
104+
try {
105+
PeerConnectionManager.add(webSocketClient, config, peer, urls);
106+
} catch (Exception e) {
107+
logger.error("Error connecting to peer: {}", e.getMessage());
108+
}
109+
}
110+
111+
private void handleConfigMessage(WebRtcSignalingMessage signalingMessage) {
112+
try {
113+
ObjectMapper objectMapper = new ObjectMapper();
114+
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
115+
objectMapper.readerForUpdating(this.config).readValue(signalingMessage.getPayload());
116+
} catch (Exception e) {
117+
logger.error("Error processing CONFIG message: {}", e.getMessage());
118+
}
119+
}
120+
121+
public void onConnectionEstablished() {
122+
try {
123+
webSocketClient.sendMessage(new WebRtcSignalingMessage(id));
124+
} catch (Exception e) {
125+
logger.error("Error sending REGISTER message: {}", e.getMessage());
126+
}
127+
}
128+
129+
public void onConnectionClosed() {
130+
}
131+
132+
}

src/main/java/com/example/webrtc/WebRtcPeerConnectionObserver.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.apache.logging.log4j.Logger;
55

66
import com.example.webrtc.model.WebRtcSignalingMessage;
7-
import com.fasterxml.jackson.core.JsonProcessingException;
87

98
import dev.onvoid.webrtc.PeerConnectionObserver;
109
import dev.onvoid.webrtc.RTCIceCandidate;
@@ -13,18 +12,20 @@ public class WebRtcPeerConnectionObserver implements PeerConnectionObserver {
1312
private static final Logger logger = LogManager.getLogger(WebRtcPeerConnectionObserver.class);
1413

1514
private final String peer;
15+
private WebRtcWebSocketClient webRtcWebSocketClient;
1616

17-
public WebRtcPeerConnectionObserver(String peer) {
17+
public WebRtcPeerConnectionObserver(WebRtcWebSocketClient webRtcWebSocketClient, String peer) {
18+
this.webRtcWebSocketClient = webRtcWebSocketClient;
1819
this.peer = peer;
1920
}
2021

2122
@Override
2223
public void onIceCandidate(RTCIceCandidate candidate) {
2324
// Send the ICE candidate to the other peer
2425
try {
25-
new WebRtcSignalingMessage(peer, candidate);
26-
} catch (JsonProcessingException e) {
27-
logger.error("Error serializing ICE candidate: {}", e.getMessage());
26+
webRtcWebSocketClient.sendMessage(new WebRtcSignalingMessage(peer, candidate));
27+
} catch (Exception e) {
28+
logger.error("Unable to send ICE candidate to peer {} as {}", peer, e.getMessage());
2829
}
2930
}
3031
}

src/main/java/com/example/webrtc/WebRtcWebMessageHandler.java

-93
This file was deleted.

0 commit comments

Comments
 (0)