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; namespace ChatRoom;
@ -49,6 +50,18 @@ public class ChatRoomLogic
return null; 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) public bool SendMessage(int clientId, string contents, bool needsToBeCensored)
{ {
lock (state.accessLock) lock (state.accessLock)
@ -71,15 +84,16 @@ public class ChatRoomLogic
} }
} }
state.messages.Add(new Message var message = new Message
{ {
id = NextId(), id = NextId(),
clientId = clientId, clientId = clientId,
contents = contents, contents = contents,
needsToBeCensored = needsToBeCensored, needsToBeCensored = needsToBeCensored,
status = MessageStatus.WaitingApproval status = MessageStatus.WaitingForModerator
}); };
log.Info($"Client '{client.name}' ({client.id}) sent message '{contents}'. Needs to censored: {needsToBeCensored}"); state.messages.Add(message);
log.Info($"Client '{client.name}' ({client.id}) sent message '{contents}' ({message.id}). Needs to censored: {needsToBeCensored}");
} }
return true; return true;
@ -87,27 +101,55 @@ public class ChatRoomLogic
public ChatRoomContract.Message? GetNewMessage() public ChatRoomContract.Message? GetNewMessage()
{ {
foreach (var message in state.messages) lock (state.accessLock)
{ {
if (message.given) continue; foreach (var message in state.messages)
if (message.status != MessageStatus.WaitingApproval) continue; {
if (message.status != MessageStatus.WaitingForModerator) continue;
message.given = true; message.status = MessageStatus.GivenToModerator;
return new ChatRoomContract.Message{ return new ChatRoomContract.Message{
id = message.id, id = message.id,
contents = message.contents, contents = message.contents,
needsToBeCensored = message.needsToBeCensored needsToBeCensored = message.needsToBeCensored
}; };
}
} }
return null; 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() public void BackgroundTask()
{ {
while (true) 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) public void ApproveMessage(int messageId)
{ {
throw new NotImplementedException(); logic.ApproveMessage(messageId);
} }
public ChatRoomContract.Message? GetNewMessage() public ChatRoomContract.Message? GetNewMessage()

View File

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

View File

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