From 0f0509c2d4e18331b3503285aa4e723ad80a3a71 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Thu, 11 Oct 2018 10:44:43 +0200 Subject: [PATCH] Preparing all the models for websockets --- .../AuthParametersWebSocketMessage.java | 3 + .../json/websocket/AuthWebSocketMessage.java | 3 + .../BaseSignalingWebSocketMessage.java | 33 +++++++ .../json/websocket/BaseWebSocketMessage.java | 5 +- .../HelloOverallWebSocketMessage.java | 3 + .../json/websocket/HelloWebSocketMessage.java | 3 + .../websocket/RecipientWebSocketMessage.java | 39 +++++++++ .../RequestOfferOverallWebSocketMessage.java | 36 ++++++++ .../RequestOfferSignalingMessage.java | 40 +++++++++ .../RoomOverallWebSocketMessage.java | 37 ++++++++ .../json/websocket/RoomWebSocketMessage.java | 39 +++++++++ ...SignalingDataWebSocketMessageForOffer.java | 39 +++++++++ .../nextcloud/talk/webrtc/ScarletHelper.java | 87 +++++++++++++++++++ 13 files changed, 366 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseSignalingWebSocketMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/RecipientWebSocketMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java create mode 100644 app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java index cf4739904..a8cbcbc7a 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java @@ -24,10 +24,13 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.squareup.moshi.Json; +import org.parceler.Parcel; + import lombok.Data; @Data @JsonObject +@Parcel public class AuthParametersWebSocketMessage { @JsonField(name = "userid") String userid; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java index 17956b73a..9389f8f2c 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java @@ -24,10 +24,13 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.squareup.moshi.Json; +import org.parceler.Parcel; + import lombok.Data; @Data @JsonObject +@Parcel public class AuthWebSocketMessage { @JsonField(name = "url") String url; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseSignalingWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseSignalingWebSocketMessage.java new file mode 100644 index 000000000..bf1898758 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseSignalingWebSocketMessage.java @@ -0,0 +1,33 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class BaseSignalingWebSocketMessage extends BaseWebSocketMessage { +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java index 0af035388..4f63e7499 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/BaseWebSocketMessage.java @@ -23,11 +23,14 @@ package com.nextcloud.talk.models.json.websocket; import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; +import org.parceler.Parcel; + import lombok.Data; @Data @JsonObject -public class BaseWebSocketMessage { +@Parcel +public class BaseWebSocketMessage{ @JsonField(name = "type") String type; } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java index 33b1522cc..9196c30c5 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java @@ -24,10 +24,13 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.squareup.moshi.Json; +import org.parceler.Parcel; + import lombok.Data; @Data @JsonObject +@Parcel public class HelloOverallWebSocketMessage extends BaseWebSocketMessage { @JsonField(name = "hello") HelloWebSocketMessage helloWebSocketMessage; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java index edc655ca5..76e418c79 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java @@ -24,10 +24,13 @@ import com.bluelinelabs.logansquare.annotation.JsonField; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.squareup.moshi.Json; +import org.parceler.Parcel; + import lombok.Data; @Data @JsonObject +@Parcel public class HelloWebSocketMessage { @JsonField(name = "version") String version; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RecipientWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RecipientWebSocketMessage.java new file mode 100644 index 000000000..50c6e5e5a --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RecipientWebSocketMessage.java @@ -0,0 +1,39 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class RecipientWebSocketMessage { + @JsonField(name = "type") + String type; + + @JsonField(name = "sessionid") + String sessionId; +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java new file mode 100644 index 000000000..983624b60 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java @@ -0,0 +1,36 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class RequestOfferOverallWebSocketMessage extends BaseWebSocketMessage { + @JsonField(name = "message") + RequestOfferSignalingMessage requestOfferOverallWebSocketMessage; +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java new file mode 100644 index 000000000..677d4ea5b --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java @@ -0,0 +1,40 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.squareup.moshi.Json; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class RequestOfferSignalingMessage { + @JsonField(name = "recipient") + RecipientWebSocketMessage recipientWebSocketMessage; + + @JsonField(name = "data") + SignalingDataWebSocketMessageForOffer signalingDataWebSocketMessageForOffer; +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java new file mode 100644 index 000000000..569d1c9d0 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java @@ -0,0 +1,37 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; +import com.nextcloud.talk.models.json.rooms.RoomOverall; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class RoomOverallWebSocketMessage extends BaseWebSocketMessage { + @JsonField(name = "room") + RoomOverallWebSocketMessage roomOverallWebSocketMessage; +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java new file mode 100644 index 000000000..34353ff36 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomWebSocketMessage.java @@ -0,0 +1,39 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class RoomWebSocketMessage { + @JsonField(name = "roomid") + String roomId; + + @JsonField(name = "sessionid") + String sessiondId; +} diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java new file mode 100644 index 000000000..50118ee2c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java @@ -0,0 +1,39 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.models.json.websocket; + +import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonObject; + +import org.parceler.Parcel; + +import lombok.Data; + +@Data +@JsonObject +@Parcel +public class SignalingDataWebSocketMessageForOffer { + @JsonField(name = "type") + String type; + + @JsonField(name = "roomType") + String roomType; +} diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/ScarletHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/ScarletHelper.java index b99aeb590..1ddae3890 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/ScarletHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/ScarletHelper.java @@ -20,8 +20,23 @@ package com.nextcloud.talk.webrtc; +import com.google.android.gms.common.api.Api; import com.nextcloud.talk.api.ExternalSignaling; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.models.database.UserEntity; +import com.nextcloud.talk.models.json.rooms.Conversation; +import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; +import com.nextcloud.talk.models.json.websocket.AuthParametersWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.AuthWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.HelloOverallWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.HelloWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.RecipientWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.RequestOfferOverallWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.RequestOfferSignalingMessage; +import com.nextcloud.talk.models.json.websocket.RoomOverallWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.RoomWebSocketMessage; +import com.nextcloud.talk.models.json.websocket.SignalingDataWebSocketMessageForOffer; +import com.nextcloud.talk.utils.ApiUtils; import com.tinder.scarlet.Scarlet; import com.tinder.scarlet.messageadapter.moshi.MoshiMessageAdapter; import com.tinder.scarlet.retry.LinearBackoffStrategy; @@ -76,4 +91,76 @@ public class ScarletHelper { return externalSignaling; } } + + public HelloOverallWebSocketMessage getAssembledHelloModel(UserEntity userEntity, String ticket) { + HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); + helloOverallWebSocketMessage.setType("hello"); + HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage(); + helloWebSocketMessage.setVersion("1.0"); + AuthWebSocketMessage authWebSocketMessage = new AuthWebSocketMessage(); + authWebSocketMessage.setUrl(ApiUtils.getUrlForExternalServerAuthBackend(userEntity.getBaseUrl())); + AuthParametersWebSocketMessage authParametersWebSocketMessage = new AuthParametersWebSocketMessage(); + authParametersWebSocketMessage.setTicket(ticket); + authParametersWebSocketMessage.setUserid(userEntity.getUserId()); + authWebSocketMessage.setAuthParametersWebSocketMessage(authParametersWebSocketMessage); + helloWebSocketMessage.setAuthWebSocketMessage(authWebSocketMessage); + return helloOverallWebSocketMessage; + } + + public HelloOverallWebSocketMessage getAssembledHelloModelForResume(String resumeId) { + HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage(); + helloOverallWebSocketMessage.setType("hello"); + HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage(); + helloWebSocketMessage.setVersion("1.0"); + helloWebSocketMessage.setResumeid(resumeId); + return helloOverallWebSocketMessage; + } + + public RoomOverallWebSocketMessage getAssembledJoinOrLeaveRoomModel(String roomId, String sessionId) { + RoomOverallWebSocketMessage roomOverallWebSocketMessage = new RoomOverallWebSocketMessage(); + roomOverallWebSocketMessage.setType("room"); + RoomWebSocketMessage roomWebSocketMessage = new RoomWebSocketMessage(); + roomWebSocketMessage.setRoomId(roomId); + roomWebSocketMessage.setSessiondId(sessionId); + return roomOverallWebSocketMessage; + } + + public RequestOfferOverallWebSocketMessage getAssembledRequestOfferModel(String sessionId, String roomType) { + RequestOfferOverallWebSocketMessage requestOfferOverallWebSocketMessage = new RequestOfferOverallWebSocketMessage(); + requestOfferOverallWebSocketMessage.setType("message"); + + RequestOfferSignalingMessage requestOfferSignalingMessage = new RequestOfferSignalingMessage(); + + RecipientWebSocketMessage recipientWebSocketMessage = new RecipientWebSocketMessage(); + recipientWebSocketMessage.setType("session"); + recipientWebSocketMessage.setSessionId(sessionId); + requestOfferSignalingMessage.setRecipientWebSocketMessage(recipientWebSocketMessage); + + SignalingDataWebSocketMessageForOffer signalingDataWebSocketMessageForOffer = new SignalingDataWebSocketMessageForOffer(); + signalingDataWebSocketMessageForOffer.setRoomType(roomType); + signalingDataWebSocketMessageForOffer.setType("requestoffer"); + requestOfferSignalingMessage.setSignalingDataWebSocketMessageForOffer(signalingDataWebSocketMessageForOffer); + + requestOfferOverallWebSocketMessage.setRequestOfferOverallWebSocketMessage(requestOfferSignalingMessage); + return requestOfferOverallWebSocketMessage; + } + + /* + - (void)sendCallMessage:(NCSignalingMessage *)message + { + NSDictionary *messageDict = @{ + @"type": @"message", + @"message": @{ + @"recipient": @{ + @"type": @"session", + @"sessionid": message.to + }, + @"data": [message functionDict] + } + }; + + [self sendMessage:messageDict]; + } + + */ }