Skip to content

Commit

Permalink
Fix iOS eventSink crash
Browse files Browse the repository at this point in the history
  • Loading branch information
iheron committed Nov 4, 2023
1 parent f6d2f3a commit a41d195
Show file tree
Hide file tree
Showing 14 changed files with 100 additions and 107 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 0.4.0

* Update dependencies
* Fix iOS eventSink crash

## 0.3.5

Add reply
Expand Down
2 changes: 1 addition & 1 deletion example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ SPEC CHECKSUMS:

PODFILE CHECKSUM: 7368163408c647b7eb699d0d788ba6718e18fb8d

COCOAPODS: 1.11.3
COCOAPODS: 1.12.1
7 changes: 5 additions & 2 deletions example/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objectVersion = 54;
objects = {

/* Begin PBXBuildFile section */
Expand Down Expand Up @@ -155,7 +155,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1300;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
Expand Down Expand Up @@ -199,10 +199,12 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
Expand Down Expand Up @@ -230,6 +232,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
2 changes: 2 additions & 0 deletions example/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,7 @@
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
56 changes: 28 additions & 28 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class MyApp extends StatefulWidget {
}

class _MyAppState extends State<MyApp> {
Client _client1;
Client _client2;
Client? _client1;
Client? _client2;

@override
void initState() {
Expand Down Expand Up @@ -95,7 +95,7 @@ class _MyAppState extends State<MyApp> {
'{"Version":2,"IV":"d103adf904b4b2e8cca9659e88201e5d","MasterKey":"20042c80ccb809c72eb5cf4390b29b2ef0efb014b38f7229d48fb415ccf80668","SeedEncrypted":"3bcdca17d84dc7088c4b3f929cf1e96cf66c988f2b306f076fd181e04c5be187","Address":"NKNVgahGfYYxYaJdGZHZSxBg2QJpUhRH24M7","Scrypt":{"Salt":"a455be75074c2230","N":32768,"R":8,"P":1}}',
config: WalletConfig(password: '123'));
print(await wallet.getBalance());
String hash = await wallet.transfer(wallet.address, '0');
String? hash = await wallet.transfer(wallet.address, '0');
print(hash);
},
child: Text('transfer'),
Expand All @@ -105,21 +105,21 @@ class _MyAppState extends State<MyApp> {
Wallet wallet = await Wallet.restore(
'{"Version":2,"IV":"d103adf904b4b2e8cca9659e88201e5d","MasterKey":"20042c80ccb809c72eb5cf4390b29b2ef0efb014b38f7229d48fb415ccf80668","SeedEncrypted":"3bcdca17d84dc7088c4b3f929cf1e96cf66c988f2b306f076fd181e04c5be187","Address":"NKNVgahGfYYxYaJdGZHZSxBg2QJpUhRH24M7","Scrypt":{"Salt":"a455be75074c2230","N":32768,"R":8,"P":1}}',
config: WalletConfig(password: '123'));
int nonce = await wallet.getNonce();
int? nonce = await wallet.getNonce();
print(nonce);
},
child: Text('getNonce'),
),
TextButton(
onPressed: () async {
int height = await Wallet.getHeight();
int? height = await Wallet.getHeight();
print(height);
},
child: Text('getHeight'),
),
TextButton(
onPressed: () async {
int nonce = await Wallet.getNonceByAddress(
int? nonce = await Wallet.getNonceByAddress(
'NKNVgahGfYYxYaJdGZHZSxBg2QJpUhRH24M7');
print(nonce);
},
Expand Down Expand Up @@ -150,14 +150,14 @@ class _MyAppState extends State<MyApp> {
),
);
print('-------------_client1----------');
print(_client1.address);
_client1.onConnect.listen((event) {
print(_client1?.address);
_client1?.onConnect.listen((event) {
print('------onConnect1-----');
print(event.node);
});

Map dic = Map();
_client1.onMessage.listen((event) {
_client1?.onMessage.listen((event) {
print('------onMessage1-----');
if (dic[event.src] == null) {
dic[event.src] = 1;
Expand All @@ -171,7 +171,7 @@ class _MyAppState extends State<MyApp> {
print(event.data);
// print(event.src);
print(event.noReply);
if (!event.noReply) {
if (event.noReply != true) {
event.reply(jsonEncode({
'id': DateTime.now()
.millisecondsSinceEpoch
Expand All @@ -186,7 +186,7 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () async {
_client1.close();
_client1?.close();
},
child: Text('close'),
),
Expand All @@ -197,8 +197,8 @@ class _MyAppState extends State<MyApp> {
'contentType': 'text',
'content': 'hi'
}));
var res = await _client1.sendText(
[_client2.address],
var res = await _client1?.sendText(
[_client2!.address],
jsonEncode({
'id': DateTime.now()
.millisecondsSinceEpoch
Expand All @@ -212,62 +212,62 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () async {
var res = await _client1.subscribe(
var res = await _client1?.subscribe(
topic: genChannelId('ttest'));
print(res);
},
child: Text('subscribe'),
),
TextButton(
onPressed: () async {
var res = await _client1.unsubscribe(
var res = await _client1?.unsubscribe(
topic: genChannelId('ttest'));
print(res);
},
child: Text('unsubscribe'),
),
TextButton(
onPressed: () async {
var res = await _client1.getSubscribersCount(
var res = await _client1?.getSubscribersCount(
topic: genChannelId('ttest'));
print(res);
},
child: Text('getSubscribersCount'),
),
TextButton(
onPressed: () async {
var res = await _client1.getSubscription(
var res = await _client1?.getSubscription(
topic: genChannelId('ttest'),
subscriber: _client1.address);
subscriber: _client1!.address);
print(res);
},
child: Text('getSubscription'),
),
TextButton(
onPressed: () async {
var res = await _client1.getSubscribers(
var res = await _client1?.getSubscribers(
topic: genChannelId('ttest'));
print(res);
},
child: Text('getSubscribers'),
),
TextButton(
onPressed: () async {
var res = await _client1.getHeight();
var res = await _client1?.getHeight();
print(res);
},
child: Text('getHeight'),
),
TextButton(
onPressed: () async {
var res = await _client1.getNonce();
var res = await _client1?.getNonce();
print(res);
},
child: Text('getNonce'),
),
TextButton(
onPressed: () async {
var res = await _client1.getNonceByAddress(
var res = await _client1?.getNonceByAddress(
'NKNVgahGfYYxYaJdGZHZSxBg2QJpUhRH24M7');
print(res);
},
Expand All @@ -286,11 +286,11 @@ class _MyAppState extends State<MyApp> {
await _client2?.close();
_client2 = await Client.create(hexDecode(
'bd8bd3de4dd0f798fac5a0a56e536a8bacd5b7f46d0951d8665fd68d0a910996'));
_client2.onConnect.listen((event) {
_client2?.onConnect.listen((event) {
print('------onConnect2-----');
print(event.node);
});
_client2.onMessage.listen((event) {
_client2?.onMessage.listen((event) {
print('------onMessage2-----');
print(event.type);
print(event.encrypted);
Expand All @@ -303,16 +303,16 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () async {
_client2.close();
_client2?.close();
},
child: Text('close'),
),
TextButton(
onPressed: () async {
var res = await _client2.sendText([
_client1.address
var res = await _client2?.sendText([
_client1!.address
], jsonEncode({'contentType': 'text', 'content': 'hi2'}),noReply: false);
print(res.data);
print(res?.data);
},
child: Text('sendText'),
),
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: Demonstrates how to use the nkn_sdk_flutter plugin.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

environment:
sdk: ">=2.7.0 <3.0.0"
sdk: '>=3.0.6 <4.0.0'

dependencies:
flutter:
Expand Down
27 changes: 0 additions & 27 deletions example/test/widget_test.dart

This file was deleted.

28 changes: 20 additions & 8 deletions ios/Classes/ChannelBase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,36 @@ class ChannelBase: NSObject {
}
}

func eventSinkSuccess(eventSink: @escaping FlutterEventSink, resp: Any?) {
func eventSinkSuccess(eventSink: FlutterEventSink?, resp: Any?) {
guard let es = eventSink else {
return
}
DispatchQueue.main.async {
eventSink(resp)
es(resp)
}
}
func eventSinkError(eventSink: @escaping FlutterEventSink, error: NSError?, code: String? = "") {
func eventSinkError(eventSink: FlutterEventSink?, error: NSError?, code: String? = "") {
guard let es = eventSink else {
return
}
DispatchQueue.main.async {
eventSink(FlutterError(code: code ?? "", message: error?.localizedDescription, details: ""))
es(FlutterError(code: code ?? "", message: error?.localizedDescription, details: ""))
}
}
func eventSinkError(eventSink: @escaping FlutterEventSink, error: Error?, code: String? = "") {
func eventSinkError(eventSink: FlutterEventSink?, error: Error?, code: String? = "") {
guard let es = eventSink else {
return
}
DispatchQueue.main.async {
eventSink(FlutterError(code: code ?? "", message: error?.localizedDescription, details: ""))
es(FlutterError(code: code ?? "", message: error?.localizedDescription, details: ""))
}
}
func eventSinkError(eventSink: @escaping FlutterEventSink, code: String? = "", message: String? = "", details: String? = "") {
func eventSinkError(eventSink: FlutterEventSink?, code: String? = "", message: String? = "", details: String? = "") {
guard let es = eventSink else {
return
}
DispatchQueue.main.async {
eventSink(FlutterError(code: code ?? "", message: message, details: details))
es(FlutterError(code: code ?? "", message: message, details: details))
}
}
}
7 changes: 3 additions & 4 deletions ios/Classes/impl/Client.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ class Client : ChannelBase, IChannelHandler, FlutterStreamHandler {
}

func onCancel(withArguments arguments: Any?) -> FlutterError? {
eventSink = nil
return nil
}

Expand Down Expand Up @@ -78,7 +77,7 @@ class Client : ChannelBase, IChannelHandler, FlutterStreamHandler {
do {
try clientMap[id]?.close()
} catch let error {
self.eventSinkError(eventSink: eventSink!, error: error, code: id)
self.eventSinkError(eventSink: eventSink, error: error, code: id)
}
clientMap.removeValue(forKey: id)
}
Expand Down Expand Up @@ -107,7 +106,7 @@ class Client : ChannelBase, IChannelHandler, FlutterStreamHandler {
}
resp["rpcServers"] = rpcServers
NSLog("%@", resp)
self.eventSinkSuccess(eventSink: eventSink!, resp: resp)
self.eventSinkSuccess(eventSink: eventSink, resp: resp)
}

private func addMessageReceiveQueue(client: NknMultiClient) {
Expand All @@ -134,7 +133,7 @@ class Client : ChannelBase, IChannelHandler, FlutterStreamHandler {
"noReply": msg.noReply
]
NSLog("%@", resp)
self.eventSinkSuccess(eventSink: eventSink!, resp: resp)
self.eventSinkSuccess(eventSink: eventSink, resp: resp)
self.addMessageReceiveQueue(client: client)
}

Expand Down
Loading

0 comments on commit a41d195

Please sign in to comment.