async_message_queue_controller 0.1.1
async_message_queue_controller: ^0.1.1 copied to clipboard

Dart native js
Flutter Android iOS web

An asynchronous message queue controller.

AsyncMessageQueueProcessor #

A simple controller that processes a message payload queue asynchronously.

Useful when needing to process asynchronously a series of messages with predefined payload type, and those processes should be sequential.

For instance, manage several file uploads in a Flutter app, and be able to suspend the queue when the connectivity is lost.

Usage #

A simple usage example:

import 'package:async_message_queue_controller/async_message_queue_controller.dart';
import "dart:async";

/// The callback used by the controller to "process" a message/payload
/// Here the payload is a simple string, an simulates a heavy process
/// lasting 1 second.

Future<Map<String,String>> process(String msg){
  return new Future.delayed(const Duration(seconds: 1), () => {'OK':' Processed msg : $msg'});

void main() async {

  var mqc = new AsyncMessageQueueController<String, Map<String,String>>(process);

  Stream<Map<String, String>> s = mqc.start();

  mqc.queueMessage('Hello'); // will appear after 1 sec
  mqc.queueMessage('World'); // will appear after 2 sec

  // stop the process after 3 seconds
  new Timer(new Duration(seconds: 3), ()=> mqc.queueMessage('stop') );

  // this will not be processed
  new Timer(new Duration(seconds: 4), ()=> mqc.queueMessage('will not be processed') );

  // Loop waiting for processed values
  await for (var value in s) {
    if (value['OK'] == ' Processed msg : stop') break; // stop our loop if 'stop' is sent
    print(value['OK']); // Otherwise print the value