Private
Public Access
1
0
Files
Kordophone/kordophone/Bridge/MBIMUpdateQueue.m

62 lines
1.3 KiB
Mathematica
Raw Normal View History

2018-11-17 01:07:55 -08:00
//
// 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