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;
|
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,43 +84,72 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatRoomContract.Message? GetNewMessage()
|
public ChatRoomContract.Message? GetNewMessage()
|
||||||
|
{
|
||||||
|
lock (state.accessLock)
|
||||||
{
|
{
|
||||||
foreach (var message in state.messages)
|
foreach (var message in state.messages)
|
||||||
{
|
{
|
||||||
if (message.given) continue;
|
if (message.status != MessageStatus.WaitingForModerator) continue;
|
||||||
if (message.status != MessageStatus.WaitingApproval) 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user