Skip to content

Commit

Permalink
change requestLibraryAsync and fix endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
nerzh committed May 31, 2022
1 parent 72a174d commit 63e0078
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 29 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Swift Client for Everscale SDK

[![SPM](https://img.shields.io/badge/swift-package%20manager-green)](https://swift.org/package-manager/)
[![SPM](https://img.shields.io/badge/SDK%20VERSION-1.34.0-orange)](https://github.com/tonlabs/TON-SDK)
[![SPM](https://img.shields.io/badge/SDK%20VERSION-1.34.1-orange)](https://github.com/tonlabs/TON-SDK)

Swift is a strongly typed language that has long been used not only for iOS development. Apple is actively promoting it to new platforms and today it can be used for almost any task. Thanks to this, this implementation provides the work of Everscale SDK on many platforms at once, including the native one for mobile phones. Let me remind you that swift can also be built for android.

Expand Down
42 changes: 22 additions & 20 deletions Sources/EverscaleClientSwift/Binding/Binding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public var TSDKRequestSync = tc_request_sync
public var TSDKRequestAsync = tc_request

public protocol TSDKBindingPrtcl {

var context: TSDKContext { get }
static func convertToTSDKString(_ string: String, _ handler: (_ tsdkString: TSDKString) throws -> Void) rethrows
static func convertFromTSDKString(_ tsdkString: TSDKString) -> String
Expand All @@ -31,19 +31,19 @@ public protocol TSDKBindingPrtcl {
// MARK: Binding Helpers

public final class TSDKBindingModule: TSDKBindingPrtcl {

public var context: TSDKContext = .init()
var convertToTSDKString = TSDKBindingModule.convertToTSDKString
var convertFromTSDKString = TSDKBindingModule.convertFromTSDKString
var convertTSDKStringPointerToString = TSDKBindingModule.convertTSDKStringPointerToString
var convertTSDKStringToDictionary = TSDKBindingModule.convertTSDKStringToDictionary
var convertTSDKStringPointerToDictionary = TSDKBindingModule.convertTSDKStringPointerToDictionary


public init(config: TSDKClientConfig = TSDKClientConfig()) throws {
self.context = try createContext(config: config)
}

public static func convertToTSDKString(_ string: String, _ handler: (_ tsdkString: TSDKString) throws -> Void) {
do {
try string.getPointer { (ptr: UnsafePointer<Int8>, len: Int) in
Expand All @@ -53,31 +53,31 @@ public final class TSDKBindingModule: TSDKBindingPrtcl {
fatalError("convertToTSDKString \(error.localizedDescription)")
}
}

public static func convertFromTSDKString(_ tsdkString: TSDKString) -> String {
let data = Data(bytes: tsdkString.content, count: Int(tsdkString.len))
if let s = String(data: data, encoding: .utf8) {
return s
}
return "NOT VALID"
}

public static func convertTSDKStringPointerToString(_ tsdkStringPointer: TSDKStringPointer) -> String {
let tsdkString: TSDKString = TSDKReadString(tsdkStringPointer)
defer { TSDKDestroyString(tsdkStringPointer) }
return String(cString: UnsafeRawPointer(tsdkString.content).bindMemory(to: CChar.self, capacity: Int(tsdkString.len)))
}

public static func convertTSDKStringPointerToDictionary(_ tsdkStringPointer: TSDKStringPointer) -> [String: Any]? {
let string: String = convertTSDKStringPointerToString(tsdkStringPointer)
return string.toDictionary()
}

public static func convertTSDKStringToDictionary(_ tsdkString: TSDKString) -> [String: Any]? {
let string: String = convertFromTSDKString(tsdkString)
return string.toDictionary()
}

private func createContext(config: TSDKClientConfig) throws -> UInt32 {
var contextId: UInt32 = .init()
let json: String = config.toJson() ?? "{}"
Expand All @@ -91,11 +91,11 @@ public final class TSDKBindingModule: TSDKBindingPrtcl {
}
return contextId
}

public func destroyContext() {
TSDKDestroyContext(context)
}

public func requestLibraryAsync(_ methodName: String,
_ payload: Encodable = "",
_ requestHandler: @escaping (_ requestId: UInt32,
Expand All @@ -116,9 +116,15 @@ public final class TSDKBindingModule: TSDKBindingPrtcl {
let swiftString: String = TSDKBindingModule.convertFromTSDKString(params)
let responseType: TSDKBindingResponseType = (TSDKBindingResponseType.init(rawValue: responseType) ?? .unknown)!
do {
try BindingStore.getResponseHandler(requestId)?(requestId, swiftString, responseType, finished)
let responseHandler = BindingStore.getResponseHandler(requestId)
if finished || responseType == .responseError {
BindingStore.deleteResponseHandler(requestId)
}
try responseHandler?(requestId, swiftString, responseType, finished)
} catch {
try? BindingStore.getResponseHandler(requestId)?(
let responseHandler = BindingStore.getResponseHandler(requestId)
BindingStore.deleteResponseHandler(requestId)
try? responseHandler?(
requestId,
[
"code": 0,
Expand All @@ -127,17 +133,13 @@ public final class TSDKBindingModule: TSDKBindingPrtcl {
].toAnyValue().toJSON(),
.responseError,
true)
BindingStore.deleteResponseHandler(requestId)
}

if finished || responseType == .responseError {
BindingStore.deleteResponseHandler(requestId)

}
}
}
}
}

deinit {
destroyContext()
}
Expand Down
4 changes: 3 additions & 1 deletion Sources/EverscaleClientSwift/Binding/BindingTypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@ public struct TSDKDefault: Codable {
public var error: AnyValue?
public var data: AnyValue?
public var message: AnyValue?
public var code: AnyValue?

public init(result: AnyValue? = nil, error: AnyValue? = nil, data: AnyValue? = nil, message: AnyValue? = nil) {
public init(result: AnyValue? = nil, error: AnyValue? = nil, data: AnyValue? = nil, message: AnyValue? = nil, code: AnyValue? = nil) {
self.result = result
self.error = error
self.data = data
self.message = message
self.code = code
}
}

Expand Down
2 changes: 1 addition & 1 deletion Tests/EverscaleClientSwiftTests/AbiTests.swift

Large diffs are not rendered by default.

13 changes: 7 additions & 6 deletions Tests/EverscaleClientSwiftTests/Helpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ extension XCTestCase {

func testAsyncMethods<V>(_ handler: @escaping (_ client: TSDKClientModule, _ group: DispatchGroup) -> V) -> V {
var config: TSDKClientConfig = .init()
config.network = TSDKNetworkConfig(server_address: SimpleEnv["server_address"] ?? "")
config.network = TSDKNetworkConfig(endpoints: SimpleEnv["server_address"]?.toModel([String].self) ?? [])
let client: TSDKClientModule = try! .init(config: config)
let group: DispatchGroup = .init()
return handler(client, group)
Expand All @@ -53,16 +53,17 @@ extension XCTestCase {
_ accountAddress: String? = nil,
_ value: Int = 10_000_000_000
) -> Bool {
guard let server_address = client.config.network?.server_address else {
guard let server_address = client.config.network?.endpoints, !server_address.isEmpty else {
Log.warn("Please, set client network for Giver work!")
return false
}


if (SimpleEnv["use_giver"] ?? SimpleEnv["giver_abi_name"]) ?? "" == "GiverNodeSE" {
return self.getGramsFromGiverSyncNodeSE(client, accountAddress ?? testAddr, value)
} else if (SimpleEnv["use_giver"] ?? SimpleEnv["giver_abi_name"]) ?? "" == "GiverNodeSE_v2" {
return self.getGramsFromGiverSyncNodeSE_v2(client, accountAddress ?? testAddr, value)
} else if server_address[#"net\.ton\.dev"#] {
} else if server_address.contains("https://eri01.net.everos.dev") {
return self.getGramsFromGiverSyncNetDev(client, accountAddress ?? testAddr, value)
} else {
Log.warn("No Giver for this network: \(server_address)")
Expand Down Expand Up @@ -274,7 +275,7 @@ extension XCTestCase {
}

func readKeys(_ name: String) -> TSDKKeyPair {
let keysJSONPath: String = pathToRootDirectory + "/Tests/TonClientSwiftTests/Fixtures/abi/\(name).keys.json"
let keysJSONPath: String = pathToRootDirectory + "/Tests/EverscaleClientSwiftTests/Fixtures/abi/\(name).keys.json"
var keysJSON: String = .init()
DOFileReader.readFile(keysJSONPath) { (line) in
keysJSON.append(line)
Expand All @@ -285,7 +286,7 @@ extension XCTestCase {
}

func readAbi(_ name: String) -> AnyValue {
let abiJSON: String = pathToRootDirectory + "/Tests/TonClientSwiftTests/Fixtures/abi/\(name).abi.json"
let abiJSON: String = pathToRootDirectory + "/Tests/EverscaleClientSwiftTests/Fixtures/abi/\(name).abi.json"
var abiText: String = .init()
DOFileReader.readFile(abiJSON) { (line) in
abiText.append(line)
Expand All @@ -296,7 +297,7 @@ extension XCTestCase {
}

func readTvc(_ name: String) -> Data {
let tvc: String = pathToRootDirectory + "/Tests/TonClientSwiftTests/Fixtures/abi/\(name).tvc"
let tvc: String = pathToRootDirectory + "/Tests/EverscaleClientSwiftTests/Fixtures/abi/\(name).tvc"
guard let data = FileManager.default.contents(atPath: tvc) else { fatalError("tvc not read") }

return data
Expand Down

0 comments on commit 63e0078

Please sign in to comment.