From 36a51b574298698ee4af7c39e9bb560322fd1eef Mon Sep 17 00:00:00 2001 From: SammanPali <110753804+SammanPali@users.noreply.github.com> Date: Sat, 22 Oct 2022 18:06:57 +1100 Subject: [PATCH] docs: Updated README for event-queue design pattern (#2103) * progress on the event-queue README.md, also added a new image resource. * event-queue README.md complete - ready for final checks * Update README.md --- event-queue/README.md | 185 +++++++++++++++++++++++++- event-queue/etc/event-queue-model.png | Bin 0 -> 48109 bytes 2 files changed, 178 insertions(+), 7 deletions(-) create mode 100644 event-queue/etc/event-queue-model.png diff --git a/event-queue/README.md b/event-queue/README.md index b42786e3b..2d1091f10 100644 --- a/event-queue/README.md +++ b/event-queue/README.md @@ -7,23 +7,194 @@ categories: Concurrency language: en tags: - Game programming + - GUI + - code flow --- ## Intent -Event Queue is a good pattern if You have a limited accessibility resource (for example: -Audio or Database), but You need to handle all the requests that want to use that. -It puts all the requests in a queue and process them asynchronously. -Gives the resource for the event when it is the next in the queue and in same time -removes it from the queue. +The intent of the event queue design pattern, also known as message queues, is to decouple the relationship between the +sender and receiver of events within a system. By decoupling the two parties, they do not interact with the event queue +simultaneously. Essentially, the event queue handles and processes requests in an asynchronous manner, therefore, this +system can be described as a first in, first out design pattern model. Event Queue is a suitable pattern if there is a +resource with limited accessibility (i.e. Audio or Database), however, you need to provide access to all the requests +which seeks this resource. Upon accessing an event from the queue, the program also removes it from the queue. + +![alt text](./etc/event-queue-model.png "Event Queue Visualised") + +## Explanation + +Real world example + +> The modern emailing system is an example of the fundamental process behind the event-queue design pattern. When an email +> is sent, the sender continues their daily tasks without the necessity of an immediate response from the receiver. +> Additionally, the receiver has the freedom to access and process the email at their leisure. Therefore, this process +> decouples the sender and receiver so that they are not required to engage with the queue at the same time. + + +In plain words + +> The buffer between sender and receiver improves maintainability and scalability of a system. Event queues are typically +> used to organise and carry out interprocess communication (IPC). + +Wikipedia says + +> Message queues (also known as event queues) implement an asynchronous communication pattern between two or more processes/ +>threads whereby the sending and receiving party do not need to interact with the queue at the same time. + + +Key drawback + +> As the event queue model decouples the sender-receiver relationship - this means that the event-queue design pattern is +> unsuitable for scenarios in which the sender requires a response. For example, this is a prominent feature within online +> multiplayer games, therefore, this approach require thorough consideration. + +**Programmatic Example** + +Upon examining our event-queue example, here's the app which utilised an event queue system. + +```java +import javax.sound.sampled.UnsupportedAudioFileException; +import java.io.IOException; + +public class App { + + /** + * Program entry point. + * + * @param args command line args + * @throws IOException when there is a problem with the audio file loading + * @throws UnsupportedAudioFileException when the loaded audio file is unsupported + */ + public static void main(String[] args) throws UnsupportedAudioFileException, IOException, + InterruptedException { + var audio = Audio.getInstance(); + audio.playSound(audio.getAudioStream("./etc/Bass-Drum-1.wav"), -10.0f); + audio.playSound(audio.getAudioStream("./etc/Closed-Hi-Hat-1.wav"), -8.0f); + + LOGGER.info("Press Enter key to stop the program..."); + try (var br = new BufferedReader(new InputStreamReader(System.in))) { + br.read(); + } + audio.stopService(); + } +} +``` + +Much of the design pattern is developed within the Audio class. Here we set instances, declare global variables and establish +the key methods used in the above runnable class. + +```java +public class Audio { + private static final Audio INSTANCE = new Audio(); + + private static final int MAX_PENDING = 16; + + private int headIndex; + + private int tailIndex; + + private volatile Thread updateThread = null; + + private final PlayMessage[] pendingAudio = new PlayMessage[MAX_PENDING]; + + // Visible only for testing purposes + Audio() { + + } + + public static Audio getInstance() { + return INSTANCE; + } +} +``` + +The Audio class is also responsible for handling and setting the states of the thread, this is shown in the code segments +below. + +```java +/** + * This method stops the Update Method's thread and waits till service stops. + */ +public synchronized void stopService() throws InterruptedException { + if (updateThread != null) {updateThread.interrupt();} + updateThread.join(); + updateThread = null; +} + +/** + * This method check the Update Method's thread is started. + * @return boolean + */ +public synchronized boolean isServiceRunning() { + return updateThread != null && updateThread.isAlive();} + +/** + * Starts the thread for the Update Method pattern if it was not started previously. Also when the + * thread is ready it initializes the indexes of the queue + */ +public void init() { + if (updateThread == null) { + updateThread = new Thread(() -> { + while (!Thread.currentThread().isInterrupted()) { + update(); + }});} + startThread(); +} + +/** + * This is a synchronized thread starter. + */ +private synchronized void startThread() { + if (!updateThread.isAlive()) { + updateThread.start(); + headIndex = 0; + tailIndex = 0; + } +} +``` + +New audio is added into our event queue in the playSound method found in the Audio class. The update method is then utilised +to retrieve an audio item from the queue and play it to the user. + +```java +public void playSound(AudioInputStream stream, float volume) { + init(); + // Walk the pending requests. + for (var i = headIndex; i != tailIndex; i = (i + 1) % MAX_PENDING) { + var playMessage = getPendingAudio()[i]; + if (playMessage.getStream() == stream) { + // Use the larger of the two volumes. + playMessage.setVolume(Math.max(volume, playMessage.getVolume())); + // Don't need to enqueue. + return; + } + } + getPendingAudio()[tailIndex] = new PlayMessage(stream, volume); + tailIndex = (tailIndex + 1) % MAX_PENDING; +} +``` + +Within the Audio class are some more methods with assist the construction of the event-queue design patterns, they are +summarised below. + +- getAudioStream() = returns the input stream path of a file +- getPendingAudio() = returns the current event queue item + ## Class diagram ![alt text](./etc/model.png "Event Queue") ## Applicability -Use the Event Queue pattern when -* You have a limited accessibility resource and the asynchronous process is acceptable to reach that +Use the Event Queue Pattern when + +* The sender does not require a response from the receiver. +* You wish to decouple the sender & the receiver. +* You want to process events asynchronously. +* You have a limited accessibility resource and the asynchronous process is acceptable to reach that. ## Credits * [Mihaly Kuprivecz - Event Queue] (http://gameprogrammingpatterns.com/event-queue.html) +* [Wikipedia - Message Queue] (https://en.wikipedia.org/wiki/Message_queue) +* [AWS - Message Queues] (https://aws.amazon.com/message-queue/) diff --git a/event-queue/etc/event-queue-model.png b/event-queue/etc/event-queue-model.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f9c4ddb3d789d5400a738794788d47a8f81570 GIT binary patch literal 48109 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 z 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 literal 0 HcmV?d00001