implement FileTransfer and UserService modules with WebRTC support
This commit is contained in:
13
Interfaces/IFileWriterAPI.cs
Normal file
13
Interfaces/IFileWriterAPI.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Chtn.CSharp.SDK.Interfaces
|
||||||
|
{
|
||||||
|
public interface IFileWriterAPI
|
||||||
|
{
|
||||||
|
Task OpenFile(string transferId, string fileName, long totalSize);
|
||||||
|
|
||||||
|
Task WriteChunk(string transferId, byte[] data);
|
||||||
|
|
||||||
|
void CloseFile(string transferId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Chtn.CSharp.SDK.Models.Media
|
namespace Chtn.CSharp.SDK.Models.Media
|
||||||
{
|
{
|
||||||
@@ -8,10 +9,53 @@ namespace Chtn.CSharp.SDK.Models.Media
|
|||||||
public string TargetUserId { get; set; }
|
public string TargetUserId { get; set; }
|
||||||
public List<TransferableFileMetadata> Metadata { get; set; }
|
public List<TransferableFileMetadata> Metadata { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class AcceptFileTransferReq { public string TransferId { get; set; } }
|
||||||
|
public class DeclineFileTransferReq { public string TransferId { get; set; } }
|
||||||
|
|
||||||
|
public class FileTransferSendOfferRTCReq
|
||||||
|
{
|
||||||
|
public string TransferId { get; set; }
|
||||||
|
public string Sdp { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FileTransferSendAnswerRTCReq
|
||||||
|
{
|
||||||
|
public string TransferId { get; set; }
|
||||||
|
public string Sdp { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FileTransferSendICERTCReq
|
||||||
|
{
|
||||||
|
public string TransferId { get; set; }
|
||||||
|
public string Ice { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StartNewFileTransferResp { public string TransferId { get; set; } }
|
||||||
public class TransferableFileMetadata
|
public class TransferableFileMetadata
|
||||||
{
|
{
|
||||||
public string FileId { get; set; }
|
public string FileId { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public long Size { get; set; }
|
public long Size { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DCStartNewFilePayload
|
||||||
|
{
|
||||||
|
public string TransferId { get; set; }
|
||||||
|
public TransferableFileMetadata Metadata { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DCTransferFilePayload
|
||||||
|
{
|
||||||
|
public string TransferId { get; set; }
|
||||||
|
public byte[] Chunk { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WSNewFileTransferPayload { public string TransferId { get; set; } }
|
||||||
|
public class WSNewFileTransferAcceptedPayload { public string TransferId { get; set; } }
|
||||||
|
public class WSNewFileTransferDeclinedPayload { public string TransferId { get; set; } }
|
||||||
|
public class WSNewFileTransferRTCOfferPayload { public string Sdp { get; set; } }
|
||||||
|
public class WSNewFileTransferRTCAnswerPayload { public string Sdp { get; set; } }
|
||||||
|
public class WSNewFileTransferRTCIcePayload { public string Ice { get; set; } }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,25 @@ namespace Chtn.CSharp.SDK.Models.User
|
|||||||
{
|
{
|
||||||
[JsonProperty("userid")] public string UserId { get; set; }
|
[JsonProperty("userid")] public string UserId { get; set; }
|
||||||
[JsonProperty("username")] public string Username { get; set; }
|
[JsonProperty("username")] public string Username { get; set; }
|
||||||
|
[JsonProperty("displayName")] public string DisplayName { get; set; }
|
||||||
[JsonProperty("email")] public string Email { get; set; }
|
[JsonProperty("email")] public string Email { get; set; }
|
||||||
|
[JsonProperty("phoneNumber")] public string PhoneNumber { get; set; }
|
||||||
|
[JsonProperty("pfpUrl")] public string ProfilePictureUrl { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ChangeUsernameReq { [JsonProperty("newUsername")] public string NewUsername { get; set; } }
|
||||||
|
public class ChangeDisplayNameReq { [JsonProperty("newDisplayName")] public string NewDisplayName { get; set; } }
|
||||||
|
public class ChangePasswordReq { [JsonProperty("oldPassword")] public string OldPassword { get; set; } }
|
||||||
|
public class ChangeEmailReq { [JsonProperty("newEmail")] public string NewEmail { get; set; } }
|
||||||
|
public class UploadNewPfpReq { [JsonProperty("imageData")] public string ImageDataBase64 { get; set; } }
|
||||||
|
public class VerifyMailChangeReq { [JsonProperty("code")] public string Code { get; set; } }
|
||||||
|
public class DeleteReq { [JsonProperty("password")] public string Password { get; set; } }
|
||||||
|
public class RegisterFCMTokenReq { [JsonProperty("token")] public string Token { get; set; } }
|
||||||
|
public class GetSessionsReq { }
|
||||||
|
public class ToggleGifSaveReq { [JsonProperty("enabled")] public string IsEnabled { get; set; } }
|
||||||
|
public class ChangePhoneReq { [JsonProperty("newPhoneNumber")] public string NewPhoneNumber { get; set; } }
|
||||||
|
public class VerifyPhoneChangeReq { [JsonProperty("code")] public string Code { get; set; } }
|
||||||
|
public class VerifyFCMTokenReq { [JsonProperty("token")] public string Token { get; set; } }
|
||||||
|
public class UpdateUserDataReq { [JsonProperty("userData")] public PersonalUserData Data { get; set; } }
|
||||||
|
public class GIF { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("url")] public string Url { get; set; } }
|
||||||
}
|
}
|
||||||
45
Services/FileTransferMethods.cs
Normal file
45
Services/FileTransferMethods.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Chtn.CSharp.SDK.Core;
|
||||||
|
using Chtn.CSharp.SDK.Models.Media;
|
||||||
|
|
||||||
|
namespace Chtn.CSharp.SDK.Services
|
||||||
|
{
|
||||||
|
public interface IFileTransferService
|
||||||
|
{
|
||||||
|
Task<StartNewFileTransferResp> StartNew(StartNewFileTransferReq req);
|
||||||
|
Task Accept(AcceptFileTransferReq req);
|
||||||
|
Task Decline(DeclineFileTransferReq req);
|
||||||
|
Task SendRtcOffer(FileTransferSendOfferRTCReq req);
|
||||||
|
Task SendRtcAnswer(FileTransferSendAnswerRTCReq req);
|
||||||
|
Task SendRtcIce(FileTransferSendICERTCReq req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FileTransferServiceProvider : IFileTransferService
|
||||||
|
{
|
||||||
|
private readonly ApiClient _apiClient;
|
||||||
|
|
||||||
|
public FileTransferServiceProvider(ApiClient apiClient)
|
||||||
|
{
|
||||||
|
_apiClient = apiClient ?? throw new ArgumentNullException(nameof(ApiClient));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<StartNewFileTransferResp> StartNew(StartNewFileTransferReq req) =>
|
||||||
|
await _apiClient.PostAsync<StartNewFileTransferReq, StartNewFileTransferResp>("v2/chat/dm/startNewFileTransfer", req);
|
||||||
|
|
||||||
|
public async Task Accept(AcceptFileTransferReq req) =>
|
||||||
|
await _apiClient.PostAsync<AcceptFileTransferReq, object>("v2/chat/dm/acceptFileTransfer", req);
|
||||||
|
|
||||||
|
public async Task Decline(DeclineFileTransferReq req) =>
|
||||||
|
await _apiClient.PostAsync<DeclineFileTransferReq, object>("v2/chat/dm/declineFileTransfer", req);
|
||||||
|
|
||||||
|
public async Task SendRtcOffer(FileTransferSendOfferRTCReq req) =>
|
||||||
|
await _apiClient.PostAsync<FileTransferSendOfferRTCReq, object>("v2/chat/dm/sendRtcOfferFileTransfer", req);
|
||||||
|
|
||||||
|
public async Task SendRtcAnswer(FileTransferSendAnswerRTCReq req) =>
|
||||||
|
await _apiClient.PostAsync<FileTransferSendAnswerRTCReq, object>("v2/chat/dm/sendRtcAnswerFileTransfer", req);
|
||||||
|
|
||||||
|
public async Task SendRtcIce(FileTransferSendICERTCReq req) =>
|
||||||
|
await _apiClient.PostAsync<FileTransferSendICERTCReq, object>("v2/chat/dm/sendRtcICEFileTransfer", req);
|
||||||
|
}
|
||||||
|
}
|
||||||
75
Services/UserMethods.cs
Normal file
75
Services/UserMethods.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Chtn.CSharp.SDK.Core;
|
||||||
|
using Chtn.CSharp.SDK.Models.User;
|
||||||
|
using Chtn.CSharp.SDK.Models.Session;
|
||||||
|
|
||||||
|
namespace Chtn.CSharp.SDK.Services
|
||||||
|
{
|
||||||
|
public interface IUserService
|
||||||
|
{
|
||||||
|
Task ChangeUsername(ChangeUsernameReq req);
|
||||||
|
Task ChangeDisplayName(ChangeDisplayNameReq req);
|
||||||
|
Task ChangePassword(ChangePasswordReq req);
|
||||||
|
Task ChangeEmail(ChangeEmailReq req);
|
||||||
|
Task UploadNewPfp(UploadNewPfpReq req);
|
||||||
|
Task VerifyEmailChange(VerifyMailChangeReq req);
|
||||||
|
Task Delete(DeleteReq req);
|
||||||
|
Task RegisterFirebaseToken(RegisterFCMTokenReq req);
|
||||||
|
Task<List<Session>> GetSessions(GetSessionsReq req);
|
||||||
|
Task ToggleGIFSave(ToggleGifSaveReq req);
|
||||||
|
Task ChangePhoneNumber(ChangePhoneReq req);
|
||||||
|
Task VerifyPhoneNumberChange(VerifyPhoneChangeReq req);
|
||||||
|
Task VerifyFirebaseToken(VerifyFCMTokenReq req);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UserServiceProvider : IUserService
|
||||||
|
{
|
||||||
|
private readonly ApiClient _apiClient;
|
||||||
|
|
||||||
|
public UserServiceProvider(ApiClient apiClient)
|
||||||
|
{
|
||||||
|
_apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task ChangeUsername(ChangeUsernameReq req) =>
|
||||||
|
await _apiClient.PostAsync<ChangeUsernameReq, object>("user/changeUsername", req);
|
||||||
|
|
||||||
|
public async Task ChangeDisplayName(ChangeDisplayNameReq req) =>
|
||||||
|
await _apiClient.PostAsync<ChangeDisplayNameReq, object>("user/changeDisplayName", req);
|
||||||
|
|
||||||
|
public async Task ChangePassword(ChangePasswordReq req) =>
|
||||||
|
await _apiClient.PostAsync<ChangePasswordReq, object>("user/changePassword", req);
|
||||||
|
|
||||||
|
public async Task ChangeEmail(ChangeEmailReq req) =>
|
||||||
|
await _apiClient.PostAsync<ChangeEmailReq, object>("user/changeEmail", req);
|
||||||
|
|
||||||
|
public async Task UploadNewPfp(UploadNewPfpReq req) =>
|
||||||
|
await _apiClient.PostAsync<UploadNewPfpReq, object>("user/uploadNewPfp", req);
|
||||||
|
|
||||||
|
public async Task VerifyEmailChange(VerifyMailChangeReq req) =>
|
||||||
|
await _apiClient.PostAsync<VerifyMailChangeReq, object>("user/verifyMailChange", req);
|
||||||
|
|
||||||
|
public async Task Delete(DeleteReq req) =>
|
||||||
|
await _apiClient.PostAsync<DeleteReq, object>("user/deleteAccount", req);
|
||||||
|
|
||||||
|
public async Task RegisterFirebaseToken(RegisterFCMTokenReq req) =>
|
||||||
|
await _apiClient.PostAsync<RegisterFCMTokenReq, object>("user/registerFcmToken", req);
|
||||||
|
|
||||||
|
public async Task<List<Session>> GetSessions(GetSessionsReq req) =>
|
||||||
|
await _apiClient.PostAsync<GetSessionsReq, List<Session>>("user/getSessions", req);
|
||||||
|
|
||||||
|
public async Task ToggleGIFSave(ToggleGifSaveReq req) =>
|
||||||
|
await _apiClient.PostAsync<ToggleGifSaveReq, object>("user/toggleGifSave", req);
|
||||||
|
|
||||||
|
public async Task ChangePhoneNumber(ChangePhoneReq req) =>
|
||||||
|
await _apiClient.PostAsync<ChangePhoneReq, object>("user/changePhone", req);
|
||||||
|
|
||||||
|
public async Task VerifyPhoneNumberChange(VerifyPhoneChangeReq req) =>
|
||||||
|
await _apiClient.PostAsync<VerifyPhoneChangeReq, object>("user/verifyPhoneChange", req);
|
||||||
|
|
||||||
|
public async Task VerifyFirebaseToken(VerifyFCMTokenReq req) =>
|
||||||
|
await _apiClient.PostAsync<VerifyFCMTokenReq, object>("v2/user/verifyFCMToken", req);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user