JsonRPC.swift 0.2.3

JsonRPC.swift 0.2.3

Yehor Popovych 维护。



 
依赖
ContextCodable.swift~> 0.1.0
元组~> 0.1.0
 

  • Tesseract Systems, Inc.

JsonRPC.swift

🐧 linux: ready GitHub license Build Status GitHub release SPM compatible CocoaPods version Platform OS X | iOS | tvOS | watchOS | Linux

支持 HTTP 和 WebSocket 的跨平台 JsonRPC 客户端实现

Linux WebSocket 支持

当这个错误修复时 WebSocket 应该能在 Linux 上工作: 问题 #4730 您现在可以使用 0.1.1 版本,该版本使用 SwiftNIO 进行 WebSocket。

开始使用

安装

包管理器

将以下依赖项添加到您的 Package.swift

.package(url: "https://github.com/tesseract-one/JsonRPC.swift.git", from: "0.2.0")

运行 swift build 并构建您的应用。

CocoaPods

将以下内容添加到您的 Podfile

pod 'JsonRPC.swift', '~> 0.2.0'

然后运行 pod install

例子

HTTP连接

import Foundation
import JsonRPC

let rpc = JsonRpc(.http(url: URL(string: "https://api.avax-test.network/ext/bc/C/rpc")!), queue: .main)

rpc.call(method: "web3_clientVersion", params: Params(), String.self, String.self) { res in
  print(try! res.get())
}

// Or with async/await (Swift 5.5+)
let res = await rpc.call(method: "web3_clientVersion", params: Params(), String.self, String.self)
print(res)

WebSocket连接

import Foundation
import JsonRPC

let rpc = JsonRpc(.ws(url: URL(string: "wss://api.avax-test.network/ext/bc/C/ws")!), queue: .main)

rpc.call(method: "web3_clientVersion", params: Params(), String.self, String.self) { res in
  print(try! res.get())
}

// Or with async/await (Swift 5.5+)
let res = await rpc.call(method: "web3_clientVersion", params: Params(), String.self, String.self)
print(res)

通知

import Foundation
import JsonRPC
// This will allow dynamic JSON parsing 
// https://github.com/tesseract-one/Serializable.swift
import Serializable

// Notification body structure
struct NewHeadsNotification: Decodable {
    let subscription: String
    let result: SerializableValue
}

class Delegate: ConnectableDelegate, NotificationDelegate, ErrorDelegate {
  // Connectable Delegate. Will send connection updates
  public func state(_ state: ConnectableState) {
    print("Connection state: \(state)")
  }

  // Error delegate. Will send global errors (uknown response id, etc.)
  public func error(_ error: ServiceError) {
    print("Error: \(error)")
  }

  public func notification(method: String, params: Parsable) {
    let notification = try! params.parse(to: NewHeadsNotification.self).get()!
    print("\(method): \(notification)")
  }
}

// Create RPC
let rpc = JsonRpc(.ws(url: URL(string: "wss://main-rpc.linkpool.io/ws")!, autoconnect: false), queue: .main)

// Set delegate. Notification and statuses will be forwarded to it
rpc.delegate = Delegate()

// Connect to the server
rpc.connect()

// Call subsribe method.
// You can use Params() for array of Encodable parameters or provide own custom Encodable value.
rpc.call(method: "eth_subscribe", params: Params("newHeads"), String.self, SerializableValue.self) { res in
    print(try! res.get())
}

// Or with async/await (Swift 5.5+)
let res = await rpc.call(method: "eth_subscribe", params: Params("newHeads"), String.self, SerializableValue.self)
// or let res: String = await rpc.call(method: "eth_subscribe", params: Params("newHeads"), SerializableValue.self)
print(res)

作者

许可

JsonRPC.swift遵循Apache 2.0许可。有关更多信息,请参阅LICENSE文件