Skip to content

Commit

Permalink
Merge c5c01c3 into 42c6b11
Browse files Browse the repository at this point in the history
  • Loading branch information
deavmi committed Oct 2, 2023
2 parents 42c6b11 + c5c01c3 commit a6a9659
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 5 deletions.
3 changes: 2 additions & 1 deletion source/tristanable/package.d
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ public import tristanable.manager;

/**
* A queue of queue items all of the same tag
* and queue-related facilities
*/
public import tristanable.queue : Queue;
public import tristanable.queue;

/**
* Error handling type definitions
Expand Down
12 changes: 12 additions & 0 deletions source/tristanable/queue/listener.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module tristanable.queue.listener;

// TODO: Implement me

import tristanable.queue;
import tristanable.encoding;

public interface TListener
{
// TODO: See if this is all we need / what we want
public void onQueueReceive(Queue queue, TaggedMessage message);
}
16 changes: 16 additions & 0 deletions source/tristanable/queue/package.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* Queue type and related facilities
*/
module tristanable.queue;


/**
* The Queue type for enqueueing and dequeueing messages
*/
public import tristanable.queue.queue : Queue;

/**
* Interface type for definining listeners which can be hooked
* to queue actions
*/
public import tristanable.queue.listener : TListener;
24 changes: 20 additions & 4 deletions source/tristanable/queue.d → source/tristanable/queue/queue.d
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
/**
* A queue of queue items all of the same tag
*/
module tristanable.queue;
module tristanable.queue.queue;

import tristanable.queue.listener : TListener;

import core.sync.mutex : Mutex;
import core.sync.condition : Condition;
Expand All @@ -25,6 +27,13 @@ version(unittest)
public class Queue
{
/**
* This queue's unique ID
*/
private ulong queueID;

/**
* The libsnooze event used to sleep/wake
* on queue events
* Mutex for the condition variable
*/
private Mutex mutex;
Expand All @@ -44,13 +53,20 @@ public class Queue
* The lock for the message queue
*/
private Mutex queueLock;

/**
* This queue's unique ID
* Attached queue listeners
*/
private ulong queueID;
private SList!(TListener) listeners;

/**
* Lock for the listeners queue
*/
private Mutex listenersLock;

// TODO: Add listener add/remove methods
// TODO: On queue actions add a notificaiton call to the listeners
/**
* If a message is enqueued prior
* to us sleeping then we won't
* wake up and return for it.
Expand Down

0 comments on commit a6a9659

Please sign in to comment.