- Added the `enqueue(Message)` method
- Initialize a lock for the queue itself

MessageDeliveryTransport

- Added new interface

MessageManager

- Added stub `sendq(Message)`
- Added stub `recvq(Message)`
This commit is contained in:
Tristan B. Velloza Kildaire 2023-11-20 15:37:42 +02:00
parent cd6c07d209
commit 386b86950f
1 changed files with 42 additions and 0 deletions

View File

@ -2,6 +2,7 @@ module renaissance.server.messagemanager;
import renaissance.server.server : Server;
import std.container.slist : SList;
import core.sync.mutex : Mutex;
public struct Message
{
@ -23,13 +24,44 @@ public class Queue
{
private size_t maxSize;
private SList!(Message) queue;
private Mutex lock;
public this(size_t maxSize = QUEUE_DEFAULT_SIZE)
{
this.lock = new Mutex();
}
public void enqueue(Message message)
{
// Lock the queue
this.lock.lock();
// On exit
scope(exit)
{
// Unlock the queue
this.lock.unlock();
}
// Enqueue
this.queue.insertAfter(this.queue[], message);
}
}
public interface MessageDeliveryTransport
{
// On incoming message
public bool onIncoming(Message latest, Queue from);
// On message that must be egressed
public bool onOutgoing(Message latest, Queue from);
}
// TODO: Should have a thread that manages
// ... message delivery by just calling something
// ... in server (it must handle encoding and
// ... so forth)
public class MessageManager
{
private Server server;
@ -43,6 +75,16 @@ public class MessageManager
this.sendQueue = new Queue();
this.receiveQueue = new Queue();
}
public void sendq(Message message)
{
}
public void recvq(Message message)
{
}
public static MessageManager create(Server server)
{