add approving of messages
This commit is contained in:
parent
7f6283a815
commit
619e735fd5
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public class ChatRoomService : ChatRoomContract.IChatRoomService
|
||||
|
||||
public void ApproveMessage(int messageId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
logic.ApproveMessage(messageId);
|
||||
}
|
||||
|
||||
public ChatRoomContract.Message? GetNewMessage()
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user