From 0119c7ea0b77f6ef810bdbd7c7210bf3d719b97c Mon Sep 17 00:00:00 2001
From: hamed-deriv <57184669+hamed-deriv@users.noreply.github.com>
Date: Tue, 27 Jun 2023 13:25:56 +0800
Subject: [PATCH] hamed/refactor_ws_in_deriv_api
hamed/refactor_ws_in_deriv_api
---
binary-websocket-api | 2 +-
example/ios/Flutter/AppFrameworkInfo.plist | 2 +-
example/ios/Flutter/Flutter.podspec | 12 +-
example/ios/Podfile | 2 +-
example/ios/Podfile.lock | 39 ++---
example/ios/Runner.xcodeproj/project.pbxproj | 40 +++--
.../xcshareddata/xcschemes/Runner.xcscheme | 2 +-
example/ios/Runner/Info.plist | 4 +
.../connection/api_manager/base_api.dart | 7 +
.../connection/api_manager/binary_api.dart | 51 +++---
.../connection/api_manager/enums.dart | 7 +
.../connection/api_manager/extensions.dart | 23 +++
.../connection/api_manager/mock_api.dart | 8 +
lib/state/connection/connection_cubit.dart | 149 ++++++------------
pubspec.yaml | 3 +-
.../call_manager/base_call_manager_test.dart | 8 +
16 files changed, 181 insertions(+), 178 deletions(-)
create mode 100644 lib/services/connection/api_manager/enums.dart
create mode 100644 lib/services/connection/api_manager/extensions.dart
diff --git a/binary-websocket-api b/binary-websocket-api
index 815af08a17..670da35706 160000
--- a/binary-websocket-api
+++ b/binary-websocket-api
@@ -1 +1 @@
-Subproject commit 815af08a17a6f3933923fc45d2f0f125721d57ed
+Subproject commit 670da35706fb063cddbe2e01ba59d79da6ef6264
diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist
index 6b4c0f78a7..4f8d4d2456 100644
--- a/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/example/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 8.0
+ 11.0
diff --git a/example/ios/Flutter/Flutter.podspec b/example/ios/Flutter/Flutter.podspec
index 2c4421cfe5..29758b70d5 100644
--- a/example/ios/Flutter/Flutter.podspec
+++ b/example/ios/Flutter/Flutter.podspec
@@ -1,17 +1,17 @@
#
-# NOTE: This podspec is NOT to be published. It is only used as a local source!
-# This is a generated file; do not edit or check into version control.
+# This podspec is NOT to be published. It is only used as a local source!
+# This is a generated file; do not edit or check into version control.
#
Pod::Spec.new do |s|
s.name = 'Flutter'
s.version = '1.0.0'
- s.summary = 'High-performance, high-fidelity mobile apps.'
- s.homepage = 'https://flutter.io'
- s.license = { :type => 'MIT' }
+ s.summary = 'A UI toolkit for beautiful and fast apps.'
+ s.homepage = 'https://flutter.dev'
+ s.license = { :type => 'BSD' }
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
- s.ios.deployment_target = '8.0'
+ s.ios.deployment_target = '11.0'
# Framework linking is handled by Flutter tooling, not CocoaPods.
# Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs.
s.vendored_frameworks = 'path/to/nothing'
diff --git a/example/ios/Podfile b/example/ios/Podfile
index 1e8c3c90a5..88359b225f 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index 9c4013933b..971f498761 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1,47 +1,34 @@
PODS:
- - connectivity (0.0.1):
- - Flutter
- - Reachability
- - device_info (0.0.1):
+ - device_info_plus (0.0.1):
- Flutter
- Flutter (1.0.0)
- flutter_deriv_api (0.0.1):
- Flutter
- - package_info (0.0.1):
+ - package_info_plus (0.4.5):
- Flutter
- - Reachability (3.2)
DEPENDENCIES:
- - connectivity (from `.symlinks/plugins/connectivity/ios`)
- - device_info (from `.symlinks/plugins/device_info/ios`)
+ - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`)
- flutter_deriv_api (from `.symlinks/plugins/flutter_deriv_api/ios`)
- - package_info (from `.symlinks/plugins/package_info/ios`)
-
-SPEC REPOS:
- trunk:
- - Reachability
+ - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
EXTERNAL SOURCES:
- connectivity:
- :path: ".symlinks/plugins/connectivity/ios"
- device_info:
- :path: ".symlinks/plugins/device_info/ios"
+ device_info_plus:
+ :path: ".symlinks/plugins/device_info_plus/ios"
Flutter:
:path: Flutter
flutter_deriv_api:
:path: ".symlinks/plugins/flutter_deriv_api/ios"
- package_info:
- :path: ".symlinks/plugins/package_info/ios"
+ package_info_plus:
+ :path: ".symlinks/plugins/package_info_plus/ios"
SPEC CHECKSUMS:
- connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
- device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
- Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
+ device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
+ Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_deriv_api: 9e29abd7cc5091b72303f9c8be549618415f1437
- package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
- Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
+ package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
-PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
+PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3
-COCOAPODS: 1.10.1
+COCOAPODS: 1.12.1
diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj
index 6c53661486..f973131b2d 100644
--- a/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -164,7 +164,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -213,19 +213,15 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
- "${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
- "${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
+ "${BUILT_PRODUCTS_DIR}/device_info_plus/device_info_plus.framework",
"${BUILT_PRODUCTS_DIR}/flutter_deriv_api/flutter_deriv_api.framework",
- "${BUILT_PRODUCTS_DIR}/package_info/package_info.framework",
+ "${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_deriv_api.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -234,10 +230,12 @@
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
@@ -248,6 +246,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -357,7 +356,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -379,7 +378,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
@@ -439,7 +441,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -488,7 +490,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -511,7 +513,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
@@ -538,7 +543,10 @@
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a28140cfdb..3db53b6e1f 100644
--- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
UIViewControllerBasedStatusBarAppearance
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
diff --git a/lib/services/connection/api_manager/base_api.dart b/lib/services/connection/api_manager/base_api.dart
index 8cc480351a..800e1eec5e 100644
--- a/lib/services/connection/api_manager/base_api.dart
+++ b/lib/services/connection/api_manager/base_api.dart
@@ -4,6 +4,7 @@ import 'package:flutter_deriv_api/basic_api/generated/forget_receive.dart';
import 'package:flutter_deriv_api/basic_api/request.dart';
import 'package:flutter_deriv_api/basic_api/response.dart';
import 'package:flutter_deriv_api/services/connection/api_manager/connection_information.dart';
+import 'package:flutter_deriv_api/services/connection/api_manager/enums.dart';
import 'package:flutter_deriv_api/services/connection/call_manager/base_call_manager.dart';
/// Callbacks for websocket connection.
@@ -50,4 +51,10 @@ abstract class BaseAPI {
/// Disconnects from API.
Future disconnect();
+
+ /// Gets current websocket connection status.
+ APIStatus get currentConnectionStatus;
+
+ /// Gets websocket connection status.
+ Stream get connectionStatus;
}
diff --git a/lib/services/connection/api_manager/binary_api.dart b/lib/services/connection/api_manager/binary_api.dart
index 896583b8f6..43ac1fe389 100644
--- a/lib/services/connection/api_manager/binary_api.dart
+++ b/lib/services/connection/api_manager/binary_api.dart
@@ -4,7 +4,8 @@ import 'dart:developer' as dev;
import 'dart:io';
import 'package:flutter/widgets.dart';
-import 'package:web_socket_channel/io.dart';
+
+import 'package:web_socket_client/web_socket_client.dart' as ws;
import 'package:flutter_deriv_api/api/models/enums.dart';
import 'package:flutter_deriv_api/basic_api/generated/forget_all_receive.dart';
@@ -14,6 +15,8 @@ import 'package:flutter_deriv_api/basic_api/response.dart';
import 'package:flutter_deriv_api/helpers/helpers.dart';
import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart';
import 'package:flutter_deriv_api/services/connection/api_manager/connection_information.dart';
+import 'package:flutter_deriv_api/services/connection/api_manager/enums.dart';
+import 'package:flutter_deriv_api/services/connection/api_manager/extensions.dart';
import 'package:flutter_deriv_api/services/connection/call_manager/base_call_manager.dart';
import 'package:flutter_deriv_api/services/connection/call_manager/call_history.dart';
import 'package:flutter_deriv_api/services/connection/call_manager/call_manager.dart';
@@ -26,13 +29,10 @@ class BinaryAPI extends BaseAPI {
BinaryAPI({String? key, bool enableDebug = false})
: super(key: key ?? '${UniqueKey()}', enableDebug: enableDebug);
- static const Duration _disconnectTimeOut = Duration(seconds: 5);
- static const Duration _websocketConnectTimeOut = Duration(seconds: 10);
-
/// Represents the active websocket connection.
///
/// This is used to send and receive data from the websocket server.
- IOWebSocketChannel? _webSocketChannel;
+ ws.WebSocket? _webSocketChannel;
/// Stream subscription to API data.
StreamSubscription