Skip to content

Commit f4f2636

Browse files
committed
AppRTC demo integration
1 parent 9475df7 commit f4f2636

File tree

10 files changed

+109
-98
lines changed

10 files changed

+109
-98
lines changed

webrtc-demo/webrtc-demo-api/src/main/java/dev/onvoid/webrtc/demo/apprtc/AppRTCJsonCodec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ AppRTCSignalingParameters toSignalingParameters(String json) {
4848

4949
String result = room.getString("result");
5050
if (!result.equals("SUCCESS")) {
51-
throw new RuntimeException("Room response error: " + result);
51+
throw new RuntimeException(result);
5252
}
5353

5454
room = room.getJsonObject("params");

webrtc-demo/webrtc-demo-api/src/main/java/dev/onvoid/webrtc/demo/apprtc/AppRTCWebSocketClient.java

Lines changed: 56 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import java.util.List;
5252
import java.util.Set;
5353
import java.util.concurrent.CompletableFuture;
54-
import java.util.concurrent.CompletionException;
5554
import java.util.concurrent.CompletionStage;
5655

5756
/**
@@ -116,8 +115,11 @@ private enum MessageType {
116115

117116
private SignalingListener listener;
118117

118+
private StringBuilder text;
119+
119120

120121
public AppRTCWebSocketClient() {
122+
text = new StringBuilder();
121123
wsSendQueue = new ArrayList<>();
122124
codec = new AppRTCJsonCodec();
123125
client = HttpClient.newBuilder().build();
@@ -131,13 +133,37 @@ public Set<Contact> getContacts() {
131133
}
132134

133135
@Override
134-
public void joinRoom(Contact asContact, Room room) {
135-
connect(SERVER_URL, room);
136+
public void joinRoom(Contact asContact, Room room) throws Exception {
137+
roomState = ConnectionState.NEW;
138+
139+
connectionParameters = new AppRTCConnectionParameters(SERVER_URL,
140+
room.getName());
141+
142+
String roomUrl = String.format(JOIN_URL,
143+
connectionParameters.roomUrl,
144+
connectionParameters.roomId);
145+
146+
LOGGER.log(Level.INFO, "Connecting to room: " + roomUrl);
147+
148+
HttpRequest.Builder request = HttpRequest.newBuilder()
149+
.setHeader("REFERER", connectionParameters.roomUrl)
150+
.POST(HttpRequest.BodyPublishers.noBody())
151+
.uri(URI.create(roomUrl));
152+
153+
HttpResponse<String> response = client.send(request.build(),
154+
HttpResponse.BodyHandlers
155+
.ofString());
156+
157+
String body = response.body();
158+
159+
LOGGER.log(Level.INFO, "Room response: " + body);
160+
161+
setSignalingParameters(parseConnectResponse(body));
136162
}
137163

138164
@Override
139165
public void leaveRoom() {
140-
LOGGER.log(Level.INFO, "Disconnect. Room state: " + roomState);
166+
LOGGER.log(Level.INFO, "Leaving room");
141167

142168
if (roomState == ConnectionState.CONNECTED) {
143169
LOGGER.log(Level.INFO, "Closing room");
@@ -148,7 +174,7 @@ public void leaveRoom() {
148174
roomState = ConnectionState.CLOSED;
149175

150176
if (webSocket != null) {
151-
LOGGER.log(Level.INFO, "Disconnect WebSocket in state: " + state);
177+
LOGGER.log(Level.INFO, "Disconnecting WebSocket");
152178

153179
if (state == WebSocketConnectionState.REGISTERED) {
154180
// Send "bye" to WebSocket server.
@@ -194,8 +220,6 @@ public void setSignalingListener(SignalingListener listener) {
194220
this.listener = listener;
195221
}
196222

197-
StringBuilder text = new StringBuilder();
198-
199223
@Override
200224
public void onOpen(WebSocket webSocket) {
201225
webSocket.request(1);
@@ -218,7 +242,7 @@ public CompletionStage<?> onText(WebSocket webSocket, CharSequence data,
218242
text.append(data);
219243

220244
if (last) {
221-
String message = text.toString();
245+
String message = text.toString().trim();
222246

223247
LOGGER.log(Level.INFO, "WSS->C: " + message);
224248

@@ -284,7 +308,7 @@ private void sendWSSMessage(final String method, final String message) {
284308
HttpRequest.BodyPublishers.ofString(message);
285309

286310
HttpRequest.Builder request = HttpRequest.newBuilder()
287-
.setHeader("REFERER", SERVER_URL)
311+
.setHeader("REFERER", connectionParameters.roomUrl)
288312
.uri(URI.create(postUrl));
289313

290314
if (method.equals("POST")) {
@@ -326,7 +350,9 @@ private void sendWebSocketMessage(AppRTCMessage message) {
326350
});
327351
}
328352

329-
private void signalingParametersReady(AppRTCSignalingParameters signalingParameters) {
353+
private void setSignalingParameters(AppRTCSignalingParameters signalingParameters) {
354+
this.signalingParameters = signalingParameters;
355+
330356
LOGGER.log(Level.INFO, "Room connection completed");
331357
LOGGER.log(Level.INFO, "ClientId: " + signalingParameters.clientId);
332358
LOGGER.log(Level.INFO, "Initiator: " + signalingParameters.initiator);
@@ -335,8 +361,6 @@ private void signalingParametersReady(AppRTCSignalingParameters signalingParamet
335361
LOGGER.log(Level.INFO, "ICEServer: " + iceServer);
336362
}
337363

338-
this.signalingParameters = signalingParameters;
339-
340364
if (connectionParameters.loopback && (!signalingParameters.initiator
341365
|| signalingParameters.offer != null)) {
342366
reportError("Loopback room is busy");
@@ -349,6 +373,10 @@ private void signalingParametersReady(AppRTCSignalingParameters signalingParamet
349373

350374
roomState = ConnectionState.CONNECTED;
351375

376+
startSignaling();
377+
}
378+
379+
private void startSignaling() {
352380
connectWebSocket();
353381
register();
354382

@@ -446,33 +474,6 @@ private void sendLocalIceCandidateRemovals(final RTCIceCandidate[] candidates) {
446474
}
447475
}
448476

449-
private void connect(String serverUrl, Room room) {
450-
roomState = ConnectionState.NEW;
451-
452-
connectionParameters = new AppRTCConnectionParameters(serverUrl,
453-
room.getName());
454-
455-
String roomUrl = String.format(JOIN_URL,
456-
connectionParameters.roomUrl,
457-
connectionParameters.roomId);
458-
459-
LOGGER.log(Level.INFO, "Connecting to room: " + roomUrl);
460-
461-
HttpRequest.Builder request = HttpRequest.newBuilder()
462-
.setHeader("REFERER", connectionParameters.roomUrl)
463-
.POST(HttpRequest.BodyPublishers.noBody())
464-
.uri(URI.create(roomUrl));
465-
466-
client.sendAsync(request.build(), HttpResponse.BodyHandlers.ofString())
467-
.thenApply(HttpResponse::body)
468-
.thenApply(this::parseConnectResponse)
469-
.thenAccept(this::signalingParametersReady)
470-
.exceptionally(throwable -> {
471-
reportError("Connect to room failed", throwable);
472-
return null;
473-
});
474-
}
475-
476477
private void connectWebSocket() {
477478
String wssUrl = signalingParameters.wssUrl;
478479

@@ -484,7 +485,7 @@ private void connectWebSocket() {
484485
}
485486

486487
webSocket = client.newWebSocketBuilder()
487-
.header("Origin", SERVER_URL)
488+
.header("Origin", connectionParameters.roomUrl)
488489
.buildAsync(URI.create(wssUrl), this)
489490
.join();
490491
}
@@ -510,7 +511,7 @@ private void register() {
510511
}
511512

512513
wsSendQueue.clear();
513-
});
514+
}).join();
514515
}
515516

516517
private void reportError(final String message, final Throwable error) {
@@ -531,35 +532,29 @@ private void reportError(final String errorMessage) {
531532
}
532533
}
533534

534-
private AppRTCSignalingParameters parseConnectResponse(String response) {
535-
LOGGER.log(Level.INFO, "Room response: " + response);
535+
private AppRTCSignalingParameters parseConnectResponse(String response)
536+
throws Exception {
537+
AppRTCSignalingParameters params = codec.toSignalingParameters(response);
536538

537-
try {
538-
AppRTCSignalingParameters params = codec.toSignalingParameters(response);
539+
// Request TURN servers.
540+
boolean isTurnPresent = params.iceServers.stream()
541+
.anyMatch(s -> s.urls.stream()
542+
.anyMatch(url -> url.startsWith("turn:")));
539543

540-
// Request TURN servers.
541-
boolean isTurnPresent = params.iceServers.stream()
542-
.anyMatch(s -> s.urls.stream()
543-
.anyMatch(url -> url.startsWith("turn:")));
544+
String iceServerUrl = params.iceServerUrl;
544545

545-
String iceServerUrl = params.iceServerUrl;
546-
547-
if (!isTurnPresent && nonNull(iceServerUrl) && !iceServerUrl.isEmpty()) {
548-
params.iceServers.addAll(requestTurnServers(iceServerUrl));
549-
}
550-
551-
return params;
552-
}
553-
catch (Exception e) {
554-
throw new CompletionException(e);
546+
if (!isTurnPresent && nonNull(iceServerUrl) && !iceServerUrl.isEmpty()) {
547+
params.iceServers.addAll(requestTurnServers(iceServerUrl));
555548
}
549+
550+
return params;
556551
}
557552

558553
private List<RTCIceServer> requestTurnServers(String url) throws Exception {
559554
LOGGER.log(Level.INFO, "Request TURN from: " + url);
560555

561556
HttpRequest.Builder request = HttpRequest.newBuilder()
562-
.setHeader("REFERER", SERVER_URL)
557+
.setHeader("REFERER", connectionParameters.roomUrl)
563558
.timeout(Duration.ofMillis(5000))
564559
.POST(HttpRequest.BodyPublishers.noBody())
565560
.uri(URI.create(url));
@@ -648,7 +643,7 @@ private void sendPostMessage(MessageType messageType, AppRTCMessage message) {
648643

649644
HttpRequest request = HttpRequest.newBuilder()
650645
.uri(URI.create(url))
651-
.setHeader("REFERER", SERVER_URL)
646+
.setHeader("REFERER", connectionParameters.roomUrl)
652647
.header("Content-Type", "application/json")
653648
.POST(publisher)
654649
.build();

webrtc-demo/webrtc-demo-api/src/main/java/dev/onvoid/webrtc/demo/presenter/MainPresenter.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ public class MainPresenter extends Presenter<MainView> {
4646

4747
private final PeerConnectionService peerConnectionService;
4848

49-
private final Stack<Class<? extends Presenter>> presenterStack;
49+
private final Stack<Class<Presenter<?>>> presenterStack;
5050

51-
private Presenter currentPresenter;
51+
private Presenter<?> currentPresenter;
5252

5353

5454
@Inject
@@ -107,7 +107,7 @@ private void showCall() {
107107
}
108108

109109
private void handleEvent(LoggedInEvent event) {
110-
showContacts();
110+
showCall();
111111
}
112112

113113
private void handleEvent(FullscreenEvent event) {
@@ -129,7 +129,7 @@ private void onConnectionState(Contact contact, RTCPeerConnectionState state) {
129129
case CLOSED:
130130
case DISCONNECTED:
131131
case FAILED:
132-
showContacts();
132+
showStart();
133133
break;
134134

135135
case CONNECTED:
@@ -148,11 +148,11 @@ private void hideCurrentPresenter() {
148148
LOGGER.log(Level.ERROR, "Destroy presenter failed", t);
149149
}
150150

151-
presenterStack.push(currentPresenter.getClass());
151+
presenterStack.push((Class<Presenter<?>>) currentPresenter.getClass());
152152
currentPresenter = null;
153153
}
154154

155-
private void show(Class<? extends Presenter> cls) {
155+
private void show(Class<? extends Presenter<?>> cls) {
156156
executor.execute(() -> {
157157
if (nonNull(currentPresenter)) {
158158
if (currentPresenter.getClass().equals(cls)) {
@@ -163,7 +163,7 @@ private void show(Class<? extends Presenter> cls) {
163163
}
164164

165165
try {
166-
Presenter presenter = createPresenter(cls);
166+
Presenter<?> presenter = createPresenter(cls);
167167

168168
addChild(presenter);
169169

webrtc-demo/webrtc-demo-api/src/main/java/dev/onvoid/webrtc/demo/presenter/Presenter.java

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.lang.System.Logger;
2727
import java.lang.System.Logger.Level;
2828
import java.util.HashSet;
29+
import java.util.ResourceBundle;
2930
import java.util.Set;
3031

3132
/**
@@ -103,14 +104,12 @@ protected void handleEvent(ApplicationEvent event) {
103104
}
104105
}
105106

106-
protected void handleException(Throwable throwable, String errorMessage, String title) {
107-
handleException(throwable, errorMessage, title, null);
108-
}
109-
110-
final protected void handleException(Throwable throwable, String throwMessage, String title, String message) {
111-
logException(throwable, throwMessage);
107+
protected String getTranslation(ResourceBundle bundle, String message) {
108+
if (bundle.containsKey(message)) {
109+
return bundle.getString(message);
110+
}
112111

113-
showError(title, message);
112+
return message;
114113
}
115114

116115
final protected void logException(Throwable throwable, String throwMessage) {
@@ -120,16 +119,4 @@ final protected void logException(Throwable throwable, String throwMessage) {
120119
LOGGER.log(Level.ERROR, throwMessage, throwable);
121120
}
122121

123-
final protected void showError(String title, String message) {
124-
requireNonNull(title);
125-
126-
// if (context.getDictionary().contains(title)) {
127-
// title = context.getDictionary().get(title);
128-
// }
129-
// if (context.getDictionary().contains(message)) {
130-
// message = context.getDictionary().get(message);
131-
// }
132-
//
133-
// context.getEventBus().post(new NotificationContext(NotificationType.ERROR, title, message));
134-
}
135122
}

0 commit comments

Comments
 (0)