XYOracleNetwork/sdk-bletcpbridge-swift

View on GitHub
SampleiOS/sdk-bridge-sample/ViewController.swift

Summary

Maintainability
A
0 mins
Test Coverage
//
//  ViewController.swift
//  sdk-bridge-sample
//
//  Created by Carter Harrison on 2/12/19.
//  Copyright © 2019 XYO Network. All rights reserved.
//

import UIKit
import XyBleSdk
import sdk_xyobleinterface_swift
import sdk_bletcpbridge_swift
import sdk_core_swift

class ViewController: UIViewController, XyoNodeListener {
    @IBOutlet weak var indexlabel : UILabel!
    @IBOutlet weak var archivistIpBox : UITextField!
    @IBOutlet weak var archivistPortBox : UITextField!
    @IBOutlet weak var archivistSubmit : UIButton!
    private var currentAlert : UIAlertController? = nil
    private static let BRIDGE_LISTENER_KEY = "BRIDGE_LISTENER"
    private static let BRIDGE_SCANNER_KEY = "BRIDGE_VIEW"
    private var bridge : XyoBleToTcpBridge!
    private let scanner = XYSmartScan.instance
    private let server = XyoBluetoothServer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        XyoBluetoothDevice.family.enable(enable: true)
        XyoBluetoothDeviceCreator.enable(enable: true)
        
        setBridge()
        bridge.addListener(key: ViewController.BRIDGE_LISTENER_KEY, listener: self)
        bridge.originState.addSigner(signer: XyoStubSigner())
        scanner.setDelegate(bridge, key: ViewController.BRIDGE_SCANNER_KEY)
        scanner.start(for: [XyoBluetoothDevice.family], mode: .foreground)
        server.start(listener: bridge)
        archivistSubmit.addTarget(self, action: #selector(addArchivistClick), for: UIControl.Event.touchUpInside)

    }
    
    @objc
    func addArchivistClick(sender: UIButton) {
        let ip = archivistIpBox.text ?? "localhost"
        let port = UInt32(archivistPortBox.text ?? "11000") ?? 11000
        
        bridge.archivists["MAIN"] = XyoTcpPeer(ip: ip, port: port)
        bridge.bridge()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        updateIndex()
    }
    
    private func setBridge () {
        if (bridge == nil) {
            let storage = XyoInMemoryStorage()
            let blocks = XyoStorageProviderOriginBlockRepository(storageProvider: storage, hasher: XyoSha256())
            let state = XyoStorageOriginStateRepository(storage: storage)
            let configuration = XyoRepositoryConfiguration(originState: state, originBlock: blocks)
            let queue = XyoStorageBridgeQueueRepository(storage: storage)
            
            self.bridge = XyoBleToTcpBridge(hasher: XyoSha256(), repositoryConfiguration: configuration, queueRepository: queue)
        }
    }
    
    private func updateIndex () {
        DispatchQueue.main.async {
            do {
                self.indexlabel.text = String(try self.bridge!.originState.getIndex().getValueCopy().getUInt32(offset: 0))
            } catch {
                
            }
        }
    }
    
    func onBoundWitnessStart() {}
    func onBoundWitnessDiscovered(boundWitness: XyoBoundWitness) {}
    
    func onBoundWitnessEndFailure() {
        updateIndex()
    }
    
    func onBoundWitnessEndSuccess(boundWitness: XyoBoundWitness) {
        updateIndex()
    }
}