Server code to fetch and toggle devices

This commit is contained in:
Charles Magahern
2015-12-31 19:51:51 -08:00
parent e85e9173e5
commit e6dd661338
11 changed files with 402 additions and 44 deletions
@@ -0,0 +1,45 @@
//
// NSErrorAdditions.swift
// XIONControlPanel
//
// Created by Charles Magahern on 12/31/15.
// Copyright © 2015 XION. All rights reserved.
//
import Foundation
enum XIONErrorCode: Int {
case Unknown
case ConnectionError
}
extension NSError {
private static let XIONErrorDomain = "com.xionsf.controlpanel"
class func xionError(code: XIONErrorCode) -> NSError
{
return self.xionError(code, userInfo: nil)
}
class func xionError(code: XIONErrorCode, underlying: NSError?) -> NSError
{
var userInfo: [NSObject : AnyObject]? = nil
if (underlying != nil) {
userInfo = [
NSUnderlyingErrorKey : underlying!
]
}
return self.xionError(code, userInfo: userInfo)
}
class func xionError(code: XIONErrorCode, userInfo: [NSObject : AnyObject]?) -> NSError
{
return NSError(domain: XIONErrorDomain, code: code.rawValue, userInfo: userInfo)
}
var xionErrorCode: XIONErrorCode
{
return XIONErrorCode(rawValue: self.code)!
}
}
@@ -0,0 +1,54 @@
//
// NSURLAdditions.swift
// ArchillectTV
//
// Created by Charles Magahern on 10/25/15.
//
import Foundation
extension NSURL {
var requestParameters: [String : String]? {
get
{
let urlComponents = self.absoluteString.componentsSeparatedByString("/")
let paramsString = urlComponents[urlComponents.count - 1]
let parameterComponents = paramsString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "&?"))
var dict: Dictionary<String, String> = Dictionary()
for paramPair in parameterComponents {
let kvPair = paramPair.componentsSeparatedByString("=")
if (kvPair.count == 2 && kvPair[0].characters.count > 0) {
let key = kvPair[0].stringByRemovingPercentEncoding!
let value = kvPair[1].stringByRemovingPercentEncoding!
dict[key] = value
}
}
return dict
}
}
func URLByAppendingRequestParameters(params: [String : String]) -> NSURL?
{
var paramsString = ""
for (key, value) in params {
var delim = ""
if (paramsString.characters.count == 0) {
delim = "?"
} else {
delim = "&"
}
let keyParam = key.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
let valueParam = value.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
paramsString += "\(delim)\(keyParam!)=\(valueParam!)"
}
var absoluteString = self.absoluteString
absoluteString += paramsString
return NSURL(string: absoluteString)
}
}
@@ -0,0 +1,16 @@
//
// StandardError.swift
// XIONControlPanel
//
// Created by Charles Magahern on 12/31/15.
// Copyright © 2015 XION. All rights reserved.
//
import Foundation
class StandardErrorOutputStream: OutputStreamType {
func write(string: String) {
let stderr = NSFileHandle.fileHandleWithStandardError()
stderr.writeData(string.dataUsingEncoding(NSUTF8StringEncoding)!)
}
}