LANCommander/LANCommander.SDK/Services/RpcClient.cs

62 lines
No EOL
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using LANCommander.SDK.Models;
using LANCommander.SDK.Rpc.Client;
using LANCommander.SDK.Rpc.Server;
namespace LANCommander.SDK.Services;
// Base Client
public class RpcClient(IRpcSubscriber subscriber)
{
internal static IRpcHub Hub { get; set; }
IRpcSubscriber _subscriber = subscriber;
public RpcChatClient Chat => new(_subscriber);
public bool IsConnected => _subscriber.IsConnectedAsync().Result;
public async Task ConnectAsync(Uri address)
=> await _subscriber.ConnectAsync(address);
public async Task<bool> DisconnectAsync()
=> await _subscriber.DisconnectAsync();
}
public class RpcChatClient(IRpcSubscriber subscriber)
{
public async Task<Guid> StartThreadAsync(params string[] userIdentifiers)
=> await RpcClient.Hub.Chat_StartThreadAsync(userIdentifiers);
public async Task AddParticipantAsync(Guid threadId, string participantId)
=> await RpcClient.Hub.Chat_AddParticipantAsync(threadId, participantId);
public async Task<ChatThread> GetThreadAsync(Guid threadId)
=> await RpcClient.Hub.Chat_GetThreadAsync(threadId);
public async Task<IEnumerable<ChatThread>> GetThreadsAsync()
=> await RpcClient.Hub.Chat_GetThreadsAsync();
public async Task SendMessageAsync(Guid threadId, string message)
=> await RpcClient.Hub.Chat_SendMessageAsync(threadId, message);
public async Task GetMessagesAsync(Guid threadId)
=> await RpcClient.Hub.Chat_GetMessagesAsync(threadId);
public async Task StartTypingAsync(Guid threadId)
=> await RpcClient.Hub.Chat_StartTyping(threadId);
public async Task StopTypingAsync(Guid threadId)
=> await RpcClient.Hub.Chat_StopTyping(threadId);
public async Task UpdateReadStatusAsync(Guid threadId)
=> await RpcClient.Hub.Chat_UpdateReadStatus(threadId);
public async Task<int> GetUnreadMessageCountAsync(Guid threadId)
=> await RpcClient.Hub.Chat_GetUnreadMessageCountAsync(threadId);
public async Task<IEnumerable<User>> GetUsersAsync()
=> await RpcClient.Hub.Chat_GetUsersAsync();
}