SRAutobahnOperation.m 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. //
  2. // Copyright (c) 2016-present, Facebook, Inc.
  3. // All rights reserved.
  4. //
  5. // This source code is licensed under the BSD-style license found in the
  6. // LICENSE file in the root directory of this source tree. An additional grant
  7. // of patent rights can be found in the PATENTS file in the same directory.
  8. //
  9. #import "SRAutobahnOperation.h"
  10. NS_ASSUME_NONNULL_BEGIN
  11. @interface SRAutobahnOperation ()
  12. @property (nullable, nonatomic, copy, readonly) SRAutobahnSocketTextMessageHandler textMessageHandler;
  13. @property (nullable, nonatomic, copy, readonly) SRAutobahnSocketDataMessageHandler dataMessageHandler;
  14. @end
  15. @implementation SRAutobahnOperation
  16. - (instancetype)initWithServerURL:(NSURL *)url
  17. testCommandPath:(NSString *)path
  18. caseNumber:(nullable NSNumber *)caseNumber
  19. agent:(nullable NSString *)agent
  20. textMessageHandler:(nullable SRAutobahnSocketTextMessageHandler)textMessageHandler
  21. dataMessageHandler:(nullable SRAutobahnSocketDataMessageHandler)dataMessageHandler
  22. {
  23. NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
  24. components.path = (components.path ? [components.path stringByAppendingPathComponent:path] : path);
  25. NSMutableArray<NSURLQueryItem *> *queryItems = [NSMutableArray arrayWithCapacity:2];
  26. if (caseNumber) {
  27. [queryItems addObject:[NSURLQueryItem queryItemWithName:@"case" value:caseNumber.stringValue]];
  28. }
  29. if (agent) {
  30. [queryItems addObject:[NSURLQueryItem queryItemWithName:@"agent" value:agent]];
  31. }
  32. components.queryItems = queryItems;
  33. self = [self initWithURL:components.URL];
  34. if (!self) return self;
  35. _textMessageHandler = [textMessageHandler copy];
  36. _dataMessageHandler = [dataMessageHandler copy];
  37. return self;
  38. }
  39. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithString:(NSString *)string
  40. {
  41. if (self.textMessageHandler) {
  42. self.textMessageHandler(webSocket, string);
  43. }
  44. }
  45. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessageWithData:(NSData *)data
  46. {
  47. if (self.dataMessageHandler) {
  48. self.dataMessageHandler(webSocket, data);
  49. }
  50. }
  51. @end
  52. SRAutobahnOperation *SRAutobahnTestOperation(NSURL *serverURL, NSInteger caseNumber, NSString *agent)
  53. {
  54. return [[SRAutobahnOperation alloc] initWithServerURL:serverURL
  55. testCommandPath:@"/runCase"
  56. caseNumber:@(caseNumber)
  57. agent:agent
  58. textMessageHandler:^(SRWebSocket * _Nonnull socket, NSString * _Nullable message) {
  59. [socket sendString:message error:nil];
  60. }
  61. dataMessageHandler:^(SRWebSocket * _Nonnull socket, NSData * _Nullable message) {
  62. [socket sendData:message error:nil];
  63. }];
  64. }
  65. extern SRAutobahnOperation *SRAutobahnTestResultOperation(NSURL *serverURL, NSInteger caseNumber, NSString *agent, SRAutobahnTestResultHandler handler)
  66. {
  67. return [[SRAutobahnOperation alloc] initWithServerURL:serverURL
  68. testCommandPath:@"/getCaseStatus"
  69. caseNumber:@(caseNumber)
  70. agent:agent
  71. textMessageHandler:^(SRWebSocket * _Nonnull socket, NSString * _Nullable message) {
  72. NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
  73. NSDictionary *result = [NSJSONSerialization JSONObjectWithData:messageData options:0 error:NULL];
  74. handler(result);
  75. }
  76. dataMessageHandler:nil];
  77. }
  78. extern SRAutobahnOperation *SRAutobahnTestCaseInfoOperation(NSURL *serverURL, NSInteger caseNumber, SRAutobahnTestCaseInfoHandler handler)
  79. {
  80. return [[SRAutobahnOperation alloc] initWithServerURL:serverURL
  81. testCommandPath:@"/getCaseInfo"
  82. caseNumber:@(caseNumber)
  83. agent:nil
  84. textMessageHandler:^(SRWebSocket * _Nonnull socket, NSString * _Nullable message) {
  85. NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
  86. NSDictionary *result = [NSJSONSerialization JSONObjectWithData:messageData options:0 error:NULL];
  87. handler(result);
  88. }
  89. dataMessageHandler:nil];
  90. }
  91. extern SRAutobahnOperation *SRAutobahnTestCaseCountOperation(NSURL *serverURL, NSString *agent, SRAutobahnTestCaseCountHandler handler)
  92. {
  93. return [[SRAutobahnOperation alloc] initWithServerURL:serverURL
  94. testCommandPath:@"/getCaseCount"
  95. caseNumber:nil
  96. agent:agent
  97. textMessageHandler:^(SRWebSocket * _Nonnull socket, NSString * _Nullable message) {
  98. NSInteger count = [message integerValue];
  99. handler(count);
  100. }
  101. dataMessageHandler:nil];
  102. }
  103. extern SRAutobahnOperation *SRAutobahnTestUpdateReportsOperation(NSURL *serverURL, NSString *agent)
  104. {
  105. return [[SRAutobahnOperation alloc] initWithServerURL:serverURL
  106. testCommandPath:@"/updateReports"
  107. caseNumber:nil
  108. agent:agent
  109. textMessageHandler:nil
  110. dataMessageHandler:nil];
  111. }
  112. NS_ASSUME_NONNULL_END