implement FileTransfer and UserService modules with WebRTC support

This commit is contained in:
2026-05-03 11:25:59 +02:00
parent 3166c6e647
commit d236afb1de
5 changed files with 196 additions and 0 deletions

View 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
View 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);
}
}