Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
206 lines (153 sloc) 9.05 KB
//
// Network.swift
// Focals
//
// Created by Caspar Wylie on 29/09/2016.
// Copyright © 2016 Caspar Wylie. All rights reserved.
//
/*
NETWORK COMPONENT
*/
import Foundation
import Starscream
import CoreLocation
import SwiftyJSON
@objc protocol NetworkResponseDelegate {
@objc optional func regionDataResponse(_ responseStr: String);
@objc optional func userLoggedinResponse(_ responseStr: String);
@objc optional func addedFocalResponse(_ responseStr: String);
@objc optional func userFocalsResponse(_ responseStr: String);
@objc optional func deletedFocalResponse(_ responseStr: String);
@objc optional func focalCommentsResponse(_ responseStr: String);
@objc optional func postedCommentResponse(_ responseStr: String);
@objc optional func updatedUserDataResponse(_ responseStr: String);
@objc optional func votedCommentResponse(_ responseStr: String);
@objc optional func keyDataResponse(_ responseStr: String);
@objc optional func userKnowsFocalsResponse(_ responseStr: String);
@objc optional func editCommentResponse(_ responseStr: String);
@objc optional func deletedCommentResponse(_ responseStr: String);
@objc optional func saveBackgroundCoordsResponse(_ responseStr: String);
}
//MARK: general socket functionality, and response function routing
class NetworkSocketHandler{
let socket = WebSocket(url: URL(string: "ws://casparwylie.me:3000/")!);
var ui: UserInterface1!;
var networkResponseDelegate: NetworkResponseDelegate?;
func connectWebSocket() -> WebSocket{
socket.connect();
setResponseRouteHandler();
return socket;
}
func processResponseAsJSON(_ responseData: String) -> JSON{
let responseData = responseData.data(using: String.Encoding.utf8,allowLossyConversion: false);
let responseJSON = JSON(data: responseData!);
return responseJSON;
}
func sendRelevantJsonRequest(_ socket: WebSocket, requestName: String, relevantData: [String: String]){
var relevantDataAsJson: [String: JSON] = [:];
for element in relevantData{
relevantDataAsJson[element.key] = JSON(element.value);
}
let finalRelevantDataAsJson = JSON(relevantDataAsJson);
let finalJsonRequestObject = JSON(["request": JSON(requestName), "requestData": finalRelevantDataAsJson]);
socket.write(string: finalJsonRequestObject.rawString()!);
}
func setResponseRouteHandler(){
socket.onText = { (responseString: String) in
let responseJSON = self.processResponseAsJSON(responseString);
switch(responseJSON["response"].string!){
case "regionData":
self.networkResponseDelegate?.regionDataResponse!(responseString);
case "userLoggedin":
self.networkResponseDelegate?.userLoggedinResponse!(responseString);
case "addedFocal":
self.networkResponseDelegate?.addedFocalResponse!(responseString);
case "userFocals":
self.networkResponseDelegate?.userFocalsResponse!(responseString);
case "deletedFocal":
self.networkResponseDelegate?.deletedFocalResponse!(responseString);
case "focalComments":
self.networkResponseDelegate?.focalCommentsResponse!(responseString);
case "postedComment":
self.networkResponseDelegate?.postedCommentResponse!(responseString);
case "updatedUserData":
self.networkResponseDelegate?.updatedUserDataResponse!(responseString);
case "votedComment":
self.networkResponseDelegate?.votedCommentResponse!(responseString);
case "keyData":
self.networkResponseDelegate?.keyDataResponse!(responseString);
case "userKnowsFocals":
self.networkResponseDelegate?.userKnowsFocalsResponse!(responseString);
case "editedComment":
self.networkResponseDelegate?.editCommentResponse!(responseString);
case "deletedComment":
self.networkResponseDelegate?.deletedCommentResponse!(responseString);
case "backgroundCoords":
self.networkResponseDelegate?.saveBackgroundCoordsResponse!(responseString);
default:
print("No response");
}
}
}
}
//MARK: all network request data organisers
class NetworkRequestHandler{
func loginUserRequest(_ socket: WebSocket, username: String, password: String){
let organisedRelevantData = ["username": username, "password": password];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "loginUserRequest", relevantData: organisedRelevantData);
}
func updateUserDataRequest(_ socket: WebSocket, username: String, password: String, fullname: String, email: String, userID: Int){
let updateType = (userID > 0 ? "userUpdate" : "userSignUp");
let organisedRelevantData = ["username":username, "password": password, "email": email, "fullname": fullname, "userID": String(userID), "updateType" : updateType];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "updateUserDataRequest", relevantData: organisedRelevantData);
}
func getRegionData(_ socket: WebSocket, currLocation: CLLocation){
let currentLat = currLocation.coordinate.latitude;
let currentLon = currLocation.coordinate.longitude;
let organisedRelevantData = ["longitude": String(currentLon), "latitude": String(currentLat)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "regionDataRequest", relevantData: organisedRelevantData);
}
func addFocal(_ socket: WebSocket, focalLocation: CLLocation,focalDisplayInfo: (comment: String, author: String, userID: Int, areaName: String)){
let focalLat = focalLocation.coordinate.latitude;
let focalLon = focalLocation.coordinate.longitude;
let organisedRelevantData = ["longitude": String(focalLon),
"latitude": String(focalLat),
"postText": focalDisplayInfo.comment,
"author": focalDisplayInfo.author,
"userID": String(focalDisplayInfo.userID),
"areaName": focalDisplayInfo.areaName];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "addFocalRequest", relevantData: organisedRelevantData);
}
func getUserFocals(_ socket: WebSocket,userID: Int){
let organisedRelevantData = ["userID": String(userID)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "userFocalsRequest", relevantData: organisedRelevantData);
}
func deleteFocal(_ socket: WebSocket,focalID: Int){
let organisedRelevantData = ["focalID": String(focalID)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "deleteFocalRequest", relevantData: organisedRelevantData);
}
func getFocalComments(_ socket: WebSocket, focalID: Int, updateVisited: Bool){
let organisedRelevantData = ["focalID": String(focalID), "updateVisited": String(updateVisited)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "focalCommentsRequest", relevantData: organisedRelevantData);
}
func postComment(_ socket: WebSocket, focalID: Int, username: String, commentText: String){
let organisedRelevantData = ["focalID": String(focalID), "username": username, "postText": commentText];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "postFocalCommentRequest", relevantData: organisedRelevantData);
}
func newVoteComment(_ socket: WebSocket, vote: Int, cID: Int, uID: Int){
let organisedRelevantData = ["commentID": String(cID), "userID": String(uID), "vote": String(vote)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "newVoteCommentRequest", relevantData: organisedRelevantData);
}
func getKeyData(_ socket: WebSocket){
let organisedRelevantData = ["":""];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "keyDataRequest", relevantData:organisedRelevantData);
}
func editComment(_ socket: WebSocket, text: String, cID: Int){
let organisedRelevantData = ["newText":text,"commentID":String(cID)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "editCommentRequest", relevantData:organisedRelevantData);
}
func deleteComment(_ socket: WebSocket, cID: Int){
let organisedRelevantData = ["commentID":String(cID)];
NetworkSocketHandler().sendRelevantJsonRequest(socket,requestName: "deleteCommentRequest", relevantData:organisedRelevantData);
}
}