Bhushan B
Bhushan B

Reputation: 2510

How to fix CBPeripheralManager's transmit queue is full?

I have a problem in CBPeripheralManager's method.

- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic *)characteristic onSubscribedCentrals:(NSArray *)centrals

According to Apple documentation, It will return YES if the update could be sent, or NO if the underlying transmit queue is full.

And I am getting NO. How should I fix this?

Upvotes: 1

Views: 711

Answers (1)

allprog
allprog

Reputation: 16780

When the output queue is full, you need to delay sending the response.

The worker queue scheme. The easiest way to solve this is by creating a worker queue where you insert the chunks of data you want to send and create a dispatcher block that takes the items and sends them out. When the queue is full, the current chunk is placed back on the head of the queue and after receiving the peripheralManagerIsReadyToUpdateSubscribers: you try to send again. If the central is disconnected or the connection is broken for some other reason, you should cancel all sending.

Upvotes: 3

Related Questions