Skip to content
Snippets Groups Projects
Commit b67c1871 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add basic usage examples to README.md

parent 58f2ed2d
No related branches found
No related tags found
1 merge request!4Add basic usage examples
......@@ -9,6 +9,146 @@ Add `ElixxirDAppsSDK` library as a dependency to your project using Swift Packag
For usage examples, checkout included example iOS application.
### ▶️ Instantiating client
Create a new client and store it on disk:
```swift
let createClient: ClientCreator = .live
try createClient(
directoryURL: ...,
ndf: ...,
password: ...
)
```
Load existing client from disk:
```swift
let loadClient: ClientLoader = .live
let client = try loadClient(
directoryURL: ...,
password: ...
)
```
You can also use a convenient `ClientStorage` wrapper to manage a client stored on disk:
```swift
let storage: ClientStorage = .live(
passwordStorage: .init(
save: { password in
// securely save provided client's password
},
load: {
// load securely stored client's password
}
)
)
let client: Client
if storage.hasStoredClient() {
client = try storage.loadClient()
} else {
client = try storage.createClient()
}
```
Check out included example iOS application for the `PasswordStorage` implementation that uses the iOS keychain.
### ▶️ Connecting to the network
Start network follower:
```
let client: Client = ...
try client.networkFollower.start(timeoutMS: 10_000)
```
Wait until connected:
```
let client: Client = ...
let isNetworkHealthy = client.waitForNetwork(timeoutMS: 30_000)
```
### ▶️ Making a new identity
Use the client to make a new identity:
```swift
let client: Client = ...
let myIdentity = try client.makeIdentity()
```
### ▶️ Connecting to remote
Perform auth key negotiation with the given recipient to get the `Connection`:
```swift
let client: Client = ...
let connection = try client.connect(
withAuthentication: false,
recipientContact: ...,
myIdentity: ...
)
```
Pass `true` for the `withAuthentication` parameter if you want to prove id ownership to remote as well.
### ▶️ Sending messages
Send a message to the connection's partner:
```swift
let connection: Connection = ...
let report = try connection.send(
messageType: 1,
payload: ...
)
```
Check if the round succeeded:
```swift
let client: Client = ...
try client.waitForDelivery(roundList: ..., timeoutMS: 30_000) { result in
switch result {
case .delivered(let roundResults):
...
case .notDelivered(let timedOut):
...
}
}
```
### ▶️ Receiving messages
Use connection's message listener to receive messages from partner:
```swift
let connection: Connection = ...
connection.listen(messageType: 1) { message in
...
}
```
### ▶️ Using rest-like API
Use `RestlikeRequestSender` to perform rest-like requests:
```swift
let client: Client = ...
let connection: Connection = ...
let sendRestlike: RestlikeRequestSender = .live(authenticated: false)
let response = try sendRestlike(
clientId: client.getId(),
connectionId: connection.getId(),
request: ...
)
```
Pass `true` for the `authenticated` parameter if you want to perform authenticated requests.
## 🛠 Development
Open `ElixxirDAppsSDK.xcworkspace` in Xcode (≥13.4).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment