2020-03-13 19:36:44 -07:00
|
|
|
//
|
|
|
|
|
// ServerProtocol.swift
|
|
|
|
|
// XIONControlPanel
|
|
|
|
|
//
|
|
|
|
|
// Created by James Magahern on 3/13/20.
|
|
|
|
|
// Copyright © 2020 XION. All rights reserved.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
import Foundation
|
2020-03-14 18:33:02 -07:00
|
|
|
|
2020-07-04 19:43:50 -07:00
|
|
|
enum ConnectionStatus
|
|
|
|
|
{
|
|
|
|
|
case disconnected
|
|
|
|
|
case connecting
|
|
|
|
|
case connected
|
|
|
|
|
case error
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-14 18:33:02 -07:00
|
|
|
protocol Server
|
|
|
|
|
{
|
2020-07-04 19:43:50 -07:00
|
|
|
var connectionStatus: ConnectionStatus { get }
|
2020-03-14 18:33:02 -07:00
|
|
|
|
|
|
|
|
/// Designated initializer. Takes an API endpoint URL
|
|
|
|
|
init(_ url: URL)
|
|
|
|
|
|
|
|
|
|
/// Attempts to connect to the server at the specified endpoint.
|
|
|
|
|
func connect(_ completion: @escaping (Error?) -> Void)
|
|
|
|
|
|
|
|
|
|
/// Sets server's state as "disconnected"
|
|
|
|
|
func disconnect(_ completion: (Error?) -> Void)
|
|
|
|
|
|
|
|
|
|
/// Fetches a list of all currently configured devices for this server, or returns an error.
|
|
|
|
|
func fetchDevices(_ completion: @escaping (Result<[AnyDevice], Error>) -> Void)
|
|
|
|
|
|
|
|
|
|
/// Tells the server to set the state of a given device to the given state
|
|
|
|
|
func toggleDevice(_ device: AnyDevice, state: DeviceState, completion: @escaping (Error?) -> Void)
|
|
|
|
|
|
|
|
|
|
/// Returns true if this is a device this server is responsible for
|
|
|
|
|
func responsibleForDevice(_ device: AnyDevice) -> Bool
|
|
|
|
|
}
|
|
|
|
|
|