// // MBIMUpdateQueue.m // kordophoned // // Created by James Magahern on 11/16/18. // Copyright © 2018 James Magahern. All rights reserved. // #import "MBIMUpdateQueue.h" @implementation MBIMUpdateQueue { dispatch_queue_t _accessQueue; NSMutableArray *_consumers; } + (instancetype)sharedInstance { static MBIMUpdateQueue *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; } - (instancetype)init { self = [super init]; if (self) { _accessQueue = dispatch_queue_create("net.buzzert.MBIMUpdateQueue", DISPATCH_QUEUE_SERIAL); _consumers = [[NSMutableArray alloc] init]; } return self; } - (void)addConsumer:(MBIMUpdateConsumer)consumer { __weak NSMutableArray *consumers = _consumers; dispatch_async(_accessQueue, ^{ [consumers addObject:consumer]; }); } - (void)enqueueUpdateItem:(MBIMUpdateItem *)item { __weak NSMutableArray *consumers = _consumers; dispatch_async(_accessQueue, ^{ for (MBIMUpdateConsumer consumer in consumers) { consumer(item); } [consumers removeAllObjects]; }); } @end @implementation MBIMUpdateItem @end