1
0

add approving of messages

This commit is contained in:
Rokas Puzonas 2024-09-15 15:09:33 +03:00
parent 7f6283a815
commit 619e735fd5
4 changed files with 62 additions and 18 deletions

View File

@ -1,4 +1,5 @@
using NLog;
using Castle.DynamicProxy.Generators.Emitters.SimpleAST;
using NLog;
namespace ChatRoom;
@ -49,6 +50,18 @@ public class ChatRoomLogic
return null;
}
Message? FindMessageById(int messageId)
{
foreach (var message in state.messages)
{
if (message.id == messageId)
{
return message;
}
}
return null;
}
public bool SendMessage(int clientId, string contents, bool needsToBeCensored)
{
lock (state.accessLock)
@ -71,15 +84,16 @@ public class ChatRoomLogic
}
}
state.messages.Add(new Message
var message = new Message
{
id = NextId(),
clientId = clientId,
contents = contents,
needsToBeCensored = needsToBeCensored,
status = MessageStatus.WaitingApproval
});
log.Info($"Client '{client.name}' ({client.id}) sent message '{contents}'. Needs to censored: {needsToBeCensored}");
status = MessageStatus.WaitingForModerator
};
state.messages.Add(message);
log.Info($"Client '{client.name}' ({client.id}) sent message '{contents}' ({message.id}). Needs to censored: {needsToBeCensored}");
}
return true;
@ -87,27 +101,55 @@ public class ChatRoomLogic
public ChatRoomContract.Message? GetNewMessage()
{
foreach (var message in state.messages)
lock (state.accessLock)
{
if (message.given) continue;
if (message.status != MessageStatus.WaitingApproval) continue;
foreach (var message in state.messages)
{
if (message.status != MessageStatus.WaitingForModerator) continue;
message.given = true;
return new ChatRoomContract.Message{
id = message.id,
contents = message.contents,
needsToBeCensored = message.needsToBeCensored
};
message.status = MessageStatus.GivenToModerator;
return new ChatRoomContract.Message{
id = message.id,
contents = message.contents,
needsToBeCensored = message.needsToBeCensored
};
}
}
return null;
}
public void ApproveMessage(int messageId)
{
lock (state.accessLock)
{
var message = FindMessageById(messageId);
if (message == null)
{
return;
}
if (message.status != MessageStatus.GivenToModerator)
{
return;
}
message.status = MessageStatus.Approved;
log.Info($"Message {message.id} was approved");
}
}
public void BackgroundTask()
{
while (true)
{
lock (state.accessLock)
{
int count = state.messages.RemoveAll(msg => msg.status == MessageStatus.Approved || msg.status == MessageStatus.Rejected);
log.Info($"Running periodic cleanup, removed {count} messages");
}
Thread.Sleep(10 * 1000);
}
}
}

View File

@ -12,7 +12,7 @@ public class ChatRoomService : ChatRoomContract.IChatRoomService
public void ApproveMessage(int messageId)
{
throw new NotImplementedException();
logic.ApproveMessage(messageId);
}
public ChatRoomContract.Message? GetNewMessage()

View File

@ -11,7 +11,8 @@ public class Client
public enum MessageStatus
{
WaitingApproval,
WaitingForModerator,
GivenToModerator,
Approved,
Rejected
}
@ -22,8 +23,7 @@ public class Message
public int clientId;
public string contents;
public bool needsToBeCensored;
public bool given = false;
public MessageStatus status = MessageStatus.WaitingApproval;
public MessageStatus status = MessageStatus.WaitingForModerator;
}
public class ChatRoomState

View File

@ -64,6 +64,8 @@ internal class Moderator
if (message != null)
{
log.Info($"Checking message ({message.id}): {message.contents}");
chatRoom.ApproveMessage(message.id);
}
Thread.Sleep(1 * 1000);