Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions Blink/Blink.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
4F5F12FD24B63E8200A7D9E7 /* Multipeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F12FC24B63E8200A7D9E7 /* Multipeer.swift */; };
4F5F130024B65AC200A7D9E7 /* BrainstormingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F12FF24B65AC200A7D9E7 /* BrainstormingViewModel.swift */; };
4F5F130224B65D8E00A7D9E7 /* VotingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F130124B65D8E00A7D9E7 /* VotingViewModel.swift */; };
4F5F130D24B6612E00A7D9E7 /* Multipeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F130C24B6612E00A7D9E7 /* Multipeer.swift */; };
4F5F130F24B661D700A7D9E7 /* MenuViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F130E24B661D700A7D9E7 /* MenuViewModel.swift */; };
4F5F131124B6659A00A7D9E7 /* BrainstormingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5F131024B6659A00A7D9E7 /* BrainstormingViewModel.swift */; };
A418231A24B39DDF0082962F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A418231924B39DDF0082962F /* AppDelegate.swift */; };
A418231C24B39DDF0082962F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A418231B24B39DDF0082962F /* ContentView.swift */; };
A418231E24B39DE10082962F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A418231D24B39DE10082962F /* Assets.xcassets */; };
Expand Down Expand Up @@ -59,6 +62,9 @@
4F5F12FC24B63E8200A7D9E7 /* Multipeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Multipeer.swift; sourceTree = "<group>"; };
4F5F12FF24B65AC200A7D9E7 /* BrainstormingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainstormingViewModel.swift; sourceTree = "<group>"; };
4F5F130124B65D8E00A7D9E7 /* VotingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewModel.swift; sourceTree = "<group>"; };
4F5F130C24B6612E00A7D9E7 /* Multipeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Multipeer.swift; sourceTree = "<group>"; };
4F5F130E24B661D700A7D9E7 /* MenuViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewModel.swift; sourceTree = "<group>"; };
4F5F131024B6659A00A7D9E7 /* BrainstormingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainstormingViewModel.swift; sourceTree = "<group>"; };
A418231624B39DDF0082962F /* Blink.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Blink.app; sourceTree = BUILT_PRODUCTS_DIR; };
A418231924B39DDF0082962F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
A418231B24B39DDF0082962F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -106,6 +112,10 @@
4F5F12D024B639FA00A7D9E7 /* Blink_iOS */ = {
isa = PBXGroup;
children = (
4F5F130524B660CD00A7D9E7 /* Menu */,
4F5F130424B660BF00A7D9E7 /* Brainstorming */,
4F5F130324B660B500A7D9E7 /* Voting */,
4F5F130C24B6612E00A7D9E7 /* Multipeer.swift */,
4F5F12D124B639FA00A7D9E7 /* AppDelegate.swift */,
4F5F12D324B639FA00A7D9E7 /* SceneDelegate.swift */,
4F5F12D524B639FA00A7D9E7 /* ContentView.swift */,
Expand Down Expand Up @@ -206,6 +216,77 @@
path = ViewModel;
sourceTree = "<group>";
};
4F5F130324B660B500A7D9E7 /* Voting */ = {
isa = PBXGroup;
children = (
4F5F130B24B6611800A7D9E7 /* Views */,
4F5F130A24B6610F00A7D9E7 /* ViewModels */,
);
path = Voting;
sourceTree = "<group>";
};
4F5F130424B660BF00A7D9E7 /* Brainstorming */ = {
isa = PBXGroup;
children = (
4F5F130924B6610600A7D9E7 /* View */,
4F5F130824B660FF00A7D9E7 /* ViewModels */,
);
path = Brainstorming;
sourceTree = "<group>";
};
4F5F130524B660CD00A7D9E7 /* Menu */ = {
isa = PBXGroup;
children = (
4F5F130724B660F600A7D9E7 /* View */,
4F5F130624B660ED00A7D9E7 /* ViewModels */,
);
path = Menu;
sourceTree = "<group>";
};
4F5F130624B660ED00A7D9E7 /* ViewModels */ = {
isa = PBXGroup;
children = (
4F5F130E24B661D700A7D9E7 /* MenuViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
};
4F5F130724B660F600A7D9E7 /* View */ = {
isa = PBXGroup;
children = (
);
path = View;
sourceTree = "<group>";
};
4F5F130824B660FF00A7D9E7 /* ViewModels */ = {
isa = PBXGroup;
children = (
4F5F131024B6659A00A7D9E7 /* BrainstormingViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
};
4F5F130924B6610600A7D9E7 /* View */ = {
isa = PBXGroup;
children = (
);
path = View;
sourceTree = "<group>";
};
4F5F130A24B6610F00A7D9E7 /* ViewModels */ = {
isa = PBXGroup;
children = (
);
path = ViewModels;
sourceTree = "<group>";
};
4F5F130B24B6611800A7D9E7 /* Views */ = {
isa = PBXGroup;
children = (
);
path = Views;
sourceTree = "<group>";
};
A418230D24B39DDF0082962F = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -424,8 +505,11 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4F5F131124B6659A00A7D9E7 /* BrainstormingViewModel.swift in Sources */,
4F5F12D224B639FA00A7D9E7 /* AppDelegate.swift in Sources */,
4F5F130D24B6612E00A7D9E7 /* Multipeer.swift in Sources */,
4F5F12D424B639FA00A7D9E7 /* SceneDelegate.swift in Sources */,
4F5F130F24B661D700A7D9E7 /* MenuViewModel.swift in Sources */,
4F5F12D624B639FA00A7D9E7 /* ContentView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ class BrainstormingViewModel: NSObject, MCSessionDelegate {
super.init()
multipeerConnection.delegate = self
}

}

extension BrainstormingViewModel: MCSessionDelegate {
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case MCSessionState.connected:
Expand Down
15 changes: 8 additions & 7 deletions Blink/Blink/Menu/ViewModels/MenuViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ class MenuViewModel: NSObject, MCSessionDelegate {
multipeerConnection.delegate = self
}

func startHosting(action: UIAlertAction!) {
multipeerConnection.mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "blnk", discoveryInfo: nil, session: multipeerConnection.mcSession)
multipeerConnection.mcAdvertiserAssistant.start()
print("You are hosting now!")
}
}

extension MenuViewModel: MCSessionDelegate {
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case MCSessionState.connected:
Expand All @@ -42,11 +50,4 @@ class MenuViewModel: NSObject, MCSessionDelegate {

func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
}

func startHosting(action: UIAlertAction!) {
multipeerConnection.mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "blnk-kb", discoveryInfo: nil, session: multipeerConnection.mcSession)
multipeerConnection.mcAdvertiserAssistant.start()
print("You are hosting now!")
}

}
2 changes: 1 addition & 1 deletion Blink/Blink/Multipeer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class Multipeer: NSObject {
peerID = MCPeerID(displayName: UIDevice.current.name)
mcSession = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
connectionStatus = .notConnected
mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "blink-kb", discoveryInfo: nil, session: mcSession)
mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "blnk", discoveryInfo: nil, session: mcSession)
super.init()

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//
// BrainstormingViewModel.swift
// Blink_iOS
//
// Created by Edgar Sgroi on 08/07/20.
// Copyright © 2020 Artur Carneiro. All rights reserved.
//

import Foundation
import MultipeerConnectivity

class BrainstormingViewModel: NSObject {

let multipeerConnection = Multipeer.shared

override init() {
super.init()
}

func sendIdea(idea: String) {
let mcSession = multipeerConnection.mcSession
if mcSession.connectedPeers.count > 0 {
if let ideaData = idea.data(using: .utf8) {
do {
try mcSession.send(ideaData, toPeers: mcSession.connectedPeers, with: .reliable)
} catch let error as NSError {
let ac = UIAlertController(title: "Send error", message: error.localizedDescription, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "Ok", style: .default))
// present(ac, animated: true)
}
}
}
}
}
65 changes: 65 additions & 0 deletions Blink/Blink_iOS/Menu/ViewModels/MenuViewModel.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
//
// MenuViewModel.swift
// Blink_iOS
//
// Created by Edgar Sgroi on 08/07/20.
// Copyright © 2020 Artur Carneiro. All rights reserved.
//

import Foundation
import MultipeerConnectivity

class MenuViewModel: NSObject {

//TODO - Pesquisar como usar o Browser no SwiftUI

let multipeerConnection = Multipeer.shared

override init() {
super.init()
multipeerConnection.delegate = self
}

func joinSession(action: UIAlertAction) {
// let mcBrowser = MCBrowserViewController(serviceType: "blnk", session: multipeerConnection.mcSession)
// mcBrowser.delegate = self
// present(mcBrowser, animated: true)
}
}

extension MenuViewModel: MCSessionDelegate {
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
switch state {
case MCSessionState.connected:
multipeerConnection.connectionStatus = .connected
case MCSessionState.connecting:
multipeerConnection.connectionStatus = .connecting
case MCSessionState.notConnected:
multipeerConnection.connectionStatus = .notConnected
@unknown default:
multipeerConnection.connectionStatus = .unknown
}
}

func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
}

func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
}

func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
}

func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
}
}

extension MenuViewModel: MCBrowserViewControllerDelegate {
func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
}

func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
}


}
38 changes: 38 additions & 0 deletions Blink/Blink_iOS/Multipeer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
//
// Multipeer.swift
// Blink_iOS
//
// Created by Edgar Sgroi on 08/07/20.
// Copyright © 2020 Artur Carneiro. All rights reserved.
//

import Foundation
import MultipeerConnectivity

enum ConnectionStatus {
case connected
case connecting
case notConnected
case unknown
}

class Multipeer: NSObject {

static let shared = Multipeer()

private(set) var peerID: MCPeerID
private(set) var mcSession: MCSession
var mcAdvertiserAssistant: MCAdvertiserAssistant

var connectionStatus: ConnectionStatus
var delegate: MCSessionDelegate?

override init() {
peerID = MCPeerID(displayName: UIDevice.current.name)
mcSession = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
connectionStatus = .notConnected
mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "blnk", discoveryInfo: nil, session: mcSession)
super.init()

}
}