Skip to content
Snippets Groups Projects
Select Git revision
  • baf974c1446fd4a61d529c37c99e007ce1bbb9cf
  • main default protected
  • development
  • integration
  • v1.1.5
  • v1.1.4
  • v1.1.3
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.0
11 results

XXClient-quick-start-guide.md

Blame
  • XXClient Quick Start Guide

    Add XXClient library as a dependency to your project using Swift Package Manager.

    ▶️ Instantiating cMix

    You can use a convenient CMixManager wrapper to manage cMix stored on disk:

    let cMixManager: CMixManager = .live(
      passwordStorage: .init(
        save: { password in
          // securely save provided password
        },
        load: {
          // load securely stored password
        }
      )
    )
    
    let cMix: CMix
    if cMixManager.hasStorage() {
      cMix = try cMixManager.load()
    } else {
      cMix = try cMixManager.create()
    }

    Check out included example iOS application for the PasswordStorage implementation that uses the iOS keychain.

    ▶️ Connecting to the network

    Start network follower:

    try cMix.startNetworkFollower(timeoutMS: 10_000)

    Wait until connected:

    let isNetworkHealthy = try cMix.waitForNetwork(timeoutMS: 30_000)

    ▶️ Making a new reception identity

    Use the cMix to make a new reception identity:

    let myIdentity = try cMix.makeReceptionIdentity()

    ▶️ Create new E2E

    let login: Login = .live
    let e2e = try login(
      cMixId: cMix.getId(),
      identity: myIdentity
    )

    ▶️ Connecting to remote

    Perform auth key negotiation with the given recipient to get the Connection:

    let connection = try cMix.connect(
      withAuthentication: false,
      e2eId: e2e.getId(),
      recipientContact: ...
    )

    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:

    let sendReport = try connection.send(
      messageType: 1,
      payload: ...
    )

    Check if the round succeeded:

    try cMix.waitForRoundResult(
      roundList: try sendReport.encode(),
      timeoutMS: 30_000,
      callback: .init { result in
        switch result {
        case .delivered(let roundResults):
          ...
        case .notDelivered(let timedOut):
          ...
        }
      }
    )

    ▶️ Receiving messages

    Use connection's message listener to receive messages from partner:

    try connection.registerListener(
      messageType: 1,
      listener: .init { message in
        ...
      }
    )