Skip to content

Commit 0820f4f

Browse files
committed
send active_symbols custom event and retrieve the result
1 parent bd8baaf commit 0820f4f

File tree

4 files changed

+123
-16
lines changed

4 files changed

+123
-16
lines changed

lib/api/response/active_symbols_response_result.dart

+5-14
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flutter_deriv_api/basic_api/generated/active_symbols_send.dart';
88
import 'package:flutter_deriv_api/helpers/helpers.dart';
99
import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart';
1010
import 'package:deriv_dependency_injector/dependency_injector.dart';
11+
import 'package:flutter_deriv_api/services/connection/api_manager/binary_api.dart';
1112

1213
/// Active symbols response model class.
1314
abstract class ActiveSymbolsResponseModel {
@@ -56,27 +57,17 @@ class ActiveSymbolsResponse extends ActiveSymbolsResponseModel {
5657
return resultMap;
5758
}
5859

59-
static final BaseAPI _api = Injector()<BaseAPI>();
60+
static final IsolateWrappingAPI _api =
61+
Injector()<BaseAPI>() as IsolateWrappingAPI;
6062

6163
/// Gets the list of active symbols.
6264
///
6365
/// For parameters information refer to [ActiveSymbolsRequest].
6466
/// Throws an [BaseAPIException] if API response contains an error
6567
static Future<ActiveSymbolsResponse> fetchActiveSymbols(
6668
ActiveSymbolsRequest request,
67-
) async {
68-
final ActiveSymbolsReceive response = await _api.call(
69-
request: request,
70-
);
71-
72-
checkException(
73-
response: response,
74-
exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) =>
75-
BaseAPIException(baseExceptionModel: baseExceptionModel),
76-
);
77-
78-
return ActiveSymbolsResponse.fromJson(response.activeSymbols);
79-
}
69+
) async =>
70+
_api.fetchActiveSymbols(request);
8071

8172
/// Creates a copy of instance with given parameters.
8273
ActiveSymbolsResponse copyWith({

lib/services/connection/api_manager/binary_api.dart

+56-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ import 'dart:ui' as ui;
77
import 'package:flutter/services.dart';
88

99
import 'package:flutter/widgets.dart';
10+
import 'package:flutter_deriv_api/api/exceptions/base_api_exception.dart';
11+
import 'package:flutter_deriv_api/api/models/base_exception_model.dart';
12+
import 'package:flutter_deriv_api/api/response/active_symbols_response_result.dart';
13+
import 'package:flutter_deriv_api/basic_api/generated/active_symbols_receive.dart';
14+
import 'package:flutter_deriv_api/basic_api/generated/active_symbols_send.dart';
1015
import 'package:flutter_system_proxy/flutter_system_proxy.dart';
1116
import 'package:rxdart/rxdart.dart';
1217
import 'package:web_socket_channel/io.dart';
@@ -26,6 +31,7 @@ import 'package:flutter_deriv_api/services/connection/call_manager/exceptions/ca
2631
import 'package:flutter_deriv_api/services/connection/call_manager/subscription_manager.dart';
2732

2833
part 'isolate_events.dart';
34+
2935
part 'isolate_task.dart';
3036

3137
/// This class is for handling Binary API connection and calling Binary APIs.
@@ -319,6 +325,40 @@ class IsolateWrappingAPI extends BaseAPI {
319325
}
320326
}
321327

328+
if (message is CustomIsolateEvent) {
329+
switch (message.event) {
330+
case CustomEvent.ping:
331+
case CustomEvent.activeSymbols:
332+
final ActiveSymbolsResponse activeSymbolsResponse =
333+
message.data as ActiveSymbolsResponse;
334+
_pendingEvents[message.eventId]?.complete(activeSymbolsResponse);
335+
336+
case CustomEvent.assetIndex:
337+
case CustomEvent.balance:
338+
case CustomEvent.buy:
339+
case CustomEvent.accountList:
340+
case CustomEvent.accountClosure:
341+
case CustomEvent.cancel:
342+
case CustomEvent.cashierPayment:
343+
case CustomEvent.changeEmail:
344+
case CustomEvent.changePassword:
345+
case CustomEvent.confirmEmail:
346+
case CustomEvent.contractUpdateHistory:
347+
case CustomEvent.contractUpdate:
348+
case CustomEvent.contractsFor:
349+
case CustomEvent.getAccountStatus:
350+
case CustomEvent.getAccountTypes:
351+
case CustomEvent.getAvailableAccounts:
352+
case CustomEvent.getFinancialAssessment:
353+
case CustomEvent.getLimits:
354+
case CustomEvent.getSelfExclusion:
355+
case CustomEvent.getSettings:
356+
case CustomEvent.identityVerification:
357+
case CustomEvent.jTokenCreate:
358+
case CustomEvent.kycAuthStatus:
359+
}
360+
}
361+
322362
// Check for other messages coming out from Isolate.
323363
});
324364
}
@@ -396,6 +436,22 @@ class IsolateWrappingAPI extends BaseAPI {
396436
return _callEvent(event);
397437
}
398438

439+
/// Gets the list of active symbols.
440+
///
441+
/// For parameters information refer to [ActiveSymbolsRequest].
442+
/// Throws an [BaseAPIException] if API response contains an error
443+
Future<ActiveSymbolsResponse> fetchActiveSymbols(
444+
ActiveSymbolsRequest request,
445+
) async {
446+
final event = CustomIsolateEvent<ActiveSymbolsResponse>(
447+
request: request,
448+
eventId: _getEventId,
449+
event: CustomEvent.activeSymbols,
450+
);
451+
452+
return _callEvent(event);
453+
}
454+
399455
@override
400456
Stream<Response>? subscribe({
401457
required Request request,
@@ -434,4 +490,3 @@ class IsolateWrappingAPI extends BaseAPI {
434490
_isolateSendPort?.send(_DisconnectEvent(eventId: _getEventId));
435491
}
436492
}
437-

lib/services/connection/api_manager/isolate_events.dart

+13-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class IsolateResponse<T> {
8686
/// To communicate event and get the response for custom events that in addition
8787
/// to get the BE JSON the deserialization of the JSON response to dart models
8888
/// also happens inside the isolate.
89-
abstract class CustomIsolateEvent<T> extends _IsolateEvent {
89+
class CustomIsolateEvent<T> extends _IsolateEvent {
9090
CustomIsolateEvent({
9191
required super.eventId,
9292
required this.event,
@@ -99,6 +99,18 @@ abstract class CustomIsolateEvent<T> extends _IsolateEvent {
9999
final Request request;
100100

101101
final T? data;
102+
103+
CustomIsolateEvent<T> copyWith({
104+
CustomEvent? event,
105+
Request? request,
106+
T? data,
107+
}) =>
108+
CustomIsolateEvent<T>(
109+
eventId: eventId,
110+
event: event ?? this.event,
111+
request: request ?? this.request,
112+
data: data ?? this.data,
113+
);
102114
}
103115

104116
enum CustomEvent {

lib/services/connection/api_manager/isolate_task.dart

+49
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,56 @@ void _isolateTask(IsolateConfig isolateConfig) {
8282
final response = await binaryAPI.disconnect();
8383

8484
break;
85+
case CustomIsolateEvent():
86+
_handleCustomEvent(message, binaryAPI, sendPort);
8587
}
8688
}
8789
});
8890
}
91+
92+
void _handleCustomEvent(
93+
CustomIsolateEvent<dynamic> message,
94+
BinaryAPI api,
95+
SendPort sendPort,
96+
) async {
97+
switch (message.event) {
98+
case CustomEvent.ping:
99+
case CustomEvent.activeSymbols:
100+
final ActiveSymbolsReceive response = await api.call(
101+
request: message.request,
102+
);
103+
104+
checkException(
105+
response: response,
106+
exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) =>
107+
BaseAPIException(baseExceptionModel: baseExceptionModel),
108+
);
109+
110+
final asResponse = ActiveSymbolsResponse.fromJson(response.activeSymbols);
111+
sendPort.send(message.copyWith(data: asResponse));
112+
113+
case CustomEvent.assetIndex:
114+
case CustomEvent.balance:
115+
case CustomEvent.buy:
116+
case CustomEvent.accountList:
117+
case CustomEvent.accountClosure:
118+
case CustomEvent.cancel:
119+
case CustomEvent.cashierPayment:
120+
case CustomEvent.changeEmail:
121+
case CustomEvent.changePassword:
122+
case CustomEvent.confirmEmail:
123+
case CustomEvent.contractUpdateHistory:
124+
case CustomEvent.contractUpdate:
125+
case CustomEvent.contractsFor:
126+
case CustomEvent.getAccountStatus:
127+
case CustomEvent.getAccountTypes:
128+
case CustomEvent.getAvailableAccounts:
129+
case CustomEvent.getFinancialAssessment:
130+
case CustomEvent.getLimits:
131+
case CustomEvent.getSelfExclusion:
132+
case CustomEvent.getSettings:
133+
case CustomEvent.identityVerification:
134+
case CustomEvent.jTokenCreate:
135+
case CustomEvent.kycAuthStatus:
136+
}
137+
}

0 commit comments

Comments
 (0)