using ChatRoomContract.Protocol;
using Google.Protobuf.WellKnownTypes;
using Grpc.Net.Client;
namespace ChatRoomContract;
public class ChatRoomClient : IChatRoomService
{
GrpcChannel channel;
ChatRoom.ChatRoomClient client;
public ChatRoomClient(string address)
{
channel = GrpcChannel.ForAddress(address);
client = new ChatRoom.ChatRoomClient(channel);
}
///
/// Approve a message
///
/// Message ID
public void ApproveMessage(int messageId)
{
client.ApproveMessage(new MessageId { Id = messageId });
}
///
/// Get timestamp until when the client is blocked
///
/// Client ID
/// Optional datetime object
public DateTime? GetBlockedUntil(int clientId)
{
var result = client.GetBlockedUntil(new ClientId { Id = clientId });
if (result.HasTimestamp)
{
return result.Timestamp.ToDateTime();
} else
{
return null;
}
}
///
/// Get the next message which hasn't been approved or rejected
///
/// Message object. Returns null if there is no message
public Message? GetNewMessage()
{
var result = client.GetNewMessage(new Empty());
if (result.HasMessage)
{
return new Message
{
id = result.Message.Id,
contents = result.Message.Contents,
needsToBeCensored = result.Message.NeedsToBeCensored
};
} else
{
return null;
}
}
///
/// Get number of strikes a participant has
///
/// Client ID
/// Number of strikes
public int GetStrikes(int clientId)
{
var result = client.GetStrikes(new ClientId { Id = clientId });
return result.Strikes;
}
///
/// Register client with a name
///
/// Name of client, can be duplicate between clients
/// Client ID
public int RegisterClient(string name)
{
var result = client.RegisterClient(new RegisterClientRequest { Name = name });
return result.Id;
}
///
/// Reject a message
///
/// Message ID
public void RejectMessage(int messageId)
{
client.RejectMessage(new MessageId { Id = messageId });
}
///
/// Send a message, will be given to a moderator to be approved
///
/// Client ID
/// Message contents
/// Does this message need to be censored?
/// Was sending successful, can fail if user is blocked
public bool SendMessage(int clientId, string contents, bool needsToBeCensored)
{
var result = client.SendMessage(new UserMessageRequest
{
ClientId = clientId,
Contents = contents,
NeedsToBeCensored = needsToBeCensored
});
return result.Success;
}
}