Не уверен, как реализовать проект SMB в моем приложении - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь внедрить SMB в свое приложение и нашел это https://github.com/amosavian/AMSMB2. Я не уверен, как внедрить этот код в пользовательский интерфейс моего приложения. Например, могу ли я подключить функцию подключения к кнопке, и если да, то как мне поступить? Что бы я положил в параметры connect (), когда я вызываю его, если я вызываю его. Вот код из хранилища:

import AMSMB2

class SMBClient {
/// connect to: `smb://guest@XXX.XXX.XX.XX/share`

let serverURL = URL(string: "smb://XXX.XXX.XX.XX")!
let credential = URLCredential(user: "guest", password: "", persistence: URLCredential.Persistence.forSession)
let share = "share"

lazy private var client = AMSMB2(url: self.serverURL, credential: self.credential)!

private func connect(handler: @escaping (Result<AMSMB2, Error>) -> Void) {
    // AMSMB2 can handle queueing connection requests
    client.connectShare(name: self.share) { error in
        if let error = error {
            handler(.failure(error))
        } else {
            handler(.success(self.client))
        }
    }
}

func listDirectory(path: String) {
    connect { result in
        switch result {
        case .success(let client):
            client.contentsOfDirectory(atPath: path) { result in
                switch result {
                case .success(let files):
                    for entry in files {
                        print("name:", entry[.nameKey] as! String,
                              ", path:", entry[.pathKey] as! String,
                              ", type:", entry[.fileResourceTypeKey] as! URLFileResourceType,
                              ", size:", entry[.fileSizeKey] as! Int64,
                              ", modified:", entry[.contentModificationDateKey] as! Date,
                              ", created:", entry[.creationDateKey] as! Date)
                    }

                case .failure(let error):
                    print(error)
                }
            }

        case .failure(let error):
            print(error)
        }
    }
}

func moveItem(path: String, to toPath: String) {
    self.connect { result in
        switch result {
        case .success(let client):
            client.moveItem(atPath: path, toPath: toPath) { error in
                if let error = error {
                    print(error)
                } else {
                    print("\(path) moved successfully.")
                }

                // Disconnecting is optional, it will be called eventually
                // when `AMSMB2` object is freed.
                // You may call it explicitly to detect errors.
                client.disconnectShare(completionHandler: { (error) in
                    if let error = error {
                        print(error)
                    }
                })
            }

        case .failure(let error):
            print(error)
        }
    }
  }
}
...