1//
2//  CKDKeyValueStore.h
3//  sec
4//
5//  Created by John Hurley on 9/9/12.
6//
7//
8
9#import <Foundation/Foundation.h>
10//#import "CKDKVSProxy.h"
11#import "SOSCloudKeychainConstants.h"
12#import "SOSCloudKeychainClient.h"
13
14extern CFStringRef kCKDKVSRemoteStoreID;
15extern CFStringRef kCKDAWSRemoteStoreID;
16
17//--- protocol ---
18
19@protocol CKDKVSDelegate <NSObject>
20
21@required
22
23- (id)objectForKey:(NSString *)aKey;
24- (void)setObject:(id)anObject forKey:(NSString *)aKey;
25- (void)removeObjectForKey:(NSString *)aKey;
26
27- (NSDictionary *)dictionaryRepresentation;
28
29- (BOOL)synchronize;
30
31@optional
32- (BOOL)isLocalKVS;
33// DEBUG
34- (void)setDictionaryRepresentation:(NSMutableDictionary *)initialValue;
35- (void)clearPersistentStores;
36
37@end
38
39//--- interface ---
40
41@interface CKDKeyValueStore : NSObject <CKDKVSDelegate>
42{
43    BOOL localKVS;
44    BOOL persistStore;
45    CloudItemsChangedBlock itemsChangedCallback;
46}
47
48@property (retain) id <CKDKVSDelegate> delegate;
49@property (retain) NSString *identifier;
50@property (retain) NSString *path;
51
52- (BOOL)synchronize;
53+ (CKDKeyValueStore *)defaultStore:(NSString *)identifier itemsChangedBlock:(CloudItemsChangedBlock)itemsChangedBlock;
54- (id)initWithIdentifier:(NSString *)xidentifier itemsChangedBlock:(CloudItemsChangedBlock)itemsChangedBlock;
55
56+ (CFStringRef)remoteStoreID;
57
58- (id)initWithItemsChangedBlock:(CloudItemsChangedBlock)itemsChangedBlock;
59- (void)cloudChanged:(NSNotification*)notification;
60
61@end
62
63@interface CKDKeyValueStoreCollection : NSObject
64{
65    dispatch_queue_t syncrequestqueue;
66    NSMutableDictionary *store;
67}
68@property (retain) NSMutableDictionary *collection;
69
70+ (id)sharedInstance;
71+ (id <CKDKVSDelegate>)defaultStore:(NSString *)identifier itemsChangedBlock:(CloudItemsChangedBlock)itemsChangedBlock;
72+ (void)enqueueWrite:(id)anObject forKey:(NSString *)aKey from:(NSString *)identifier;
73+ (id)enqueueWithReply:(NSString *)aKey;
74+ (BOOL)enqueueSyncWithReply;
75+ (void)postItemChangedNotification:(NSString *)keyThatChanged from:(NSString *)identifier;
76+ (void)postItemsChangedNotification:(NSArray *)keysThatChanged from:(NSString *)identifier;
77
78@end
79