-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathQueueITEngine.m
125 lines (98 loc) · 4.54 KB
/
QueueITEngine.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#import "QueueITEngine.h"
#import "QueueITApiClient.h"
#import "QueueStatus.h"
#import "IOSUtils.h"
#import "QueueITWaitingRoomView.h"
#import "QueueITWaitingRoomProvider.h"
@interface QueueITEngine()
@property (nonatomic, weak)UIViewController* host;
@property QueueITWaitingRoomProvider* waitingRoomProvider;
@property QueueITWaitingRoomView* waitingRoomView;
@end
@implementation QueueITEngine
-(instancetype)initWithHost:(UIViewController *)host customerId:(NSString*)customerId eventOrAliasId:(NSString*)eventOrAliasId layoutName:(NSString*)layoutName language:(NSString*)language
{
self = [super init];
if(self) {
self.waitingRoomProvider = [[QueueITWaitingRoomProvider alloc] initWithCustomerId:customerId
eventOrAliasId:eventOrAliasId
layoutName:layoutName
language:language];
self.waitingRoomView = [[QueueITWaitingRoomView alloc] initWithHost: host customerId: customerId eventId: eventOrAliasId];
self.host = host;
self.customerId = customerId;
self.eventId = eventOrAliasId;
self.layoutName = layoutName;
self.language = language;
self.waitingRoomView.delegate = self;
self.waitingRoomProvider.delegate = self;
}
return self;
}
-(void)setViewDelay:(int)delayInterval {
[self.waitingRoomView setViewDelay:delayInterval];
}
-(BOOL)isRequestInProgress {
return [self.waitingRoomProvider IsRequestInProgress];
}
-(BOOL)runWithEnqueueKey:(NSString *)enqueueKey
error:(NSError *__autoreleasing *)error
{
return [self.waitingRoomProvider TryPassWithEnqueueKey:enqueueKey error:error];
}
-(BOOL)runWithEnqueueToken:(NSString *)enqueueToken
error:(NSError *__autoreleasing *)error
{
return [self.waitingRoomProvider TryPassWithEnqueueToken:enqueueToken error:error];
}
-(BOOL)run:(NSError **)error
{
return [self.waitingRoomProvider TryPass:error];
}
-(void)showQueue:(NSString*)queueUrl targetUrl:(NSString*)targetUrl
{
[self.waitingRoomView show:queueUrl targetUrl:targetUrl];
}
- (void)waitingRoomView:(nonnull QueueITWaitingRoomView *)view notifyViewPassedQueue:(QueuePassedInfo * _Nullable)queuePassedInfo {
[self.queuePassedDelegate notifyYourTurn:queuePassedInfo];
}
- (void)notifyViewQueueWillOpen:(nonnull QueueITWaitingRoomView *)view {
[self.queueViewWillOpenDelegate notifyQueueViewWillOpen];
}
- (void)waitingRoomProvider:(nonnull QueueITWaitingRoomProvider *)provider notifyProviderFailure:(NSString * _Nullable)errorMessage errorCode:(long)errorCode {
if(errorCode == 3) {
[self.queueITUnavailableDelegate notifyQueueITUnavailable:errorMessage];
}
[self.queueErrorDelegate notifyQueueError:errorMessage errorCode:errorCode];
}
- (void)notifyViewSessionRestart:(nonnull QueueITWaitingRoomView *)view {
[self.queueSessionRestartDelegate notifySessionRestart];
}
- (void)notifyViewUserExited:(nonnull QueueITWaitingRoomView *)view {
[self.queueUserExitedDelegate notifyUserExited];
}
- (void)notifyViewUserClosed:(nonnull QueueITWaitingRoomView *)view {
[self.queueViewClosedDelegate notifyViewClosed];
}
- (void)waitingRoomView:(nonnull QueueITWaitingRoomView *)view notifyViewUpdatePageUrl:(NSString * _Nullable)urlString {
[self.queueUrlChangedDelegate notifyQueueUrlChanged:urlString];
}
-(void)notifyViewQueueDidAppear:(nonnull QueueITWaitingRoomView *)view {
[self.queueViewDidAppearDelegate notifyQueueViewDidAppear];
}
- (void)waitingRoomProvider:(nonnull QueueITWaitingRoomProvider *)provider notifyProviderSuccess:(QueueTryPassResult * _Nonnull)queuePassResult {
if([[queuePassResult redirectType] isEqual: @"safetynet"])
{
QueuePassedInfo* queuePassedInfo = [[QueuePassedInfo alloc] initWithQueueitToken:queuePassResult.queueToken];
[self.queuePassedDelegate notifyYourTurn:queuePassedInfo];
return;
}
else if([[queuePassResult redirectType] isEqual: @"disabled"] || [[queuePassResult redirectType] isEqual: @"idle"] || [[queuePassResult redirectType] isEqual: @"afterevent"])
{
QueueDisabledInfo* queueDisabledInfo = [[QueueDisabledInfo alloc]initWithQueueitToken:queuePassResult.queueToken];
[self.queueDisabledDelegate notifyQueueDisabled:queueDisabledInfo];
return;
}
[self showQueue:queuePassResult.queueUrl targetUrl:queuePassResult.targetUrl];
}
@end