diff --git a/Blink/Blink.xcodeproj/project.pbxproj b/Blink/Blink.xcodeproj/project.pbxproj index 46e0df4..6129925 100644 --- a/Blink/Blink.xcodeproj/project.pbxproj +++ b/Blink/Blink.xcodeproj/project.pbxproj @@ -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 */; }; @@ -59,6 +62,9 @@ 4F5F12FC24B63E8200A7D9E7 /* Multipeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Multipeer.swift; sourceTree = ""; }; 4F5F12FF24B65AC200A7D9E7 /* BrainstormingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainstormingViewModel.swift; sourceTree = ""; }; 4F5F130124B65D8E00A7D9E7 /* VotingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VotingViewModel.swift; sourceTree = ""; }; + 4F5F130C24B6612E00A7D9E7 /* Multipeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Multipeer.swift; sourceTree = ""; }; + 4F5F130E24B661D700A7D9E7 /* MenuViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewModel.swift; sourceTree = ""; }; + 4F5F131024B6659A00A7D9E7 /* BrainstormingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrainstormingViewModel.swift; sourceTree = ""; }; 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 = ""; }; A418231B24B39DDF0082962F /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -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 */, @@ -206,6 +216,77 @@ path = ViewModel; sourceTree = ""; }; + 4F5F130324B660B500A7D9E7 /* Voting */ = { + isa = PBXGroup; + children = ( + 4F5F130B24B6611800A7D9E7 /* Views */, + 4F5F130A24B6610F00A7D9E7 /* ViewModels */, + ); + path = Voting; + sourceTree = ""; + }; + 4F5F130424B660BF00A7D9E7 /* Brainstorming */ = { + isa = PBXGroup; + children = ( + 4F5F130924B6610600A7D9E7 /* View */, + 4F5F130824B660FF00A7D9E7 /* ViewModels */, + ); + path = Brainstorming; + sourceTree = ""; + }; + 4F5F130524B660CD00A7D9E7 /* Menu */ = { + isa = PBXGroup; + children = ( + 4F5F130724B660F600A7D9E7 /* View */, + 4F5F130624B660ED00A7D9E7 /* ViewModels */, + ); + path = Menu; + sourceTree = ""; + }; + 4F5F130624B660ED00A7D9E7 /* ViewModels */ = { + isa = PBXGroup; + children = ( + 4F5F130E24B661D700A7D9E7 /* MenuViewModel.swift */, + ); + path = ViewModels; + sourceTree = ""; + }; + 4F5F130724B660F600A7D9E7 /* View */ = { + isa = PBXGroup; + children = ( + ); + path = View; + sourceTree = ""; + }; + 4F5F130824B660FF00A7D9E7 /* ViewModels */ = { + isa = PBXGroup; + children = ( + 4F5F131024B6659A00A7D9E7 /* BrainstormingViewModel.swift */, + ); + path = ViewModels; + sourceTree = ""; + }; + 4F5F130924B6610600A7D9E7 /* View */ = { + isa = PBXGroup; + children = ( + ); + path = View; + sourceTree = ""; + }; + 4F5F130A24B6610F00A7D9E7 /* ViewModels */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModels; + sourceTree = ""; + }; + 4F5F130B24B6611800A7D9E7 /* Views */ = { + isa = PBXGroup; + children = ( + ); + path = Views; + sourceTree = ""; + }; A418230D24B39DDF0082962F = { isa = PBXGroup; children = ( @@ -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; diff --git a/Blink/Blink/Brainstorming/ViewModels/BrainstormingViewModel.swift b/Blink/Blink/Brainstorming/ViewModels/BrainstormingViewModel.swift index 81fce6d..b9b5ef0 100644 --- a/Blink/Blink/Brainstorming/ViewModels/BrainstormingViewModel.swift +++ b/Blink/Blink/Brainstorming/ViewModels/BrainstormingViewModel.swift @@ -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: diff --git a/Blink/Blink/Menu/ViewModels/MenuViewModel.swift b/Blink/Blink/Menu/ViewModels/MenuViewModel.swift index 66b54dc..d50023e 100644 --- a/Blink/Blink/Menu/ViewModels/MenuViewModel.swift +++ b/Blink/Blink/Menu/ViewModels/MenuViewModel.swift @@ -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: @@ -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!") - } - } diff --git a/Blink/Blink/Multipeer.swift b/Blink/Blink/Multipeer.swift index 3611db7..e8604c9 100644 --- a/Blink/Blink/Multipeer.swift +++ b/Blink/Blink/Multipeer.swift @@ -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() } diff --git a/Blink/Blink_iOS/Brainstorming/ViewModels/BrainstormingViewModel.swift b/Blink/Blink_iOS/Brainstorming/ViewModels/BrainstormingViewModel.swift new file mode 100644 index 0000000..aaf097d --- /dev/null +++ b/Blink/Blink_iOS/Brainstorming/ViewModels/BrainstormingViewModel.swift @@ -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) + } + } + } + } +} diff --git a/Blink/Blink_iOS/Menu/ViewModels/MenuViewModel.swift b/Blink/Blink_iOS/Menu/ViewModels/MenuViewModel.swift new file mode 100644 index 0000000..ad12dfe --- /dev/null +++ b/Blink/Blink_iOS/Menu/ViewModels/MenuViewModel.swift @@ -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) { + } + + +} diff --git a/Blink/Blink_iOS/Multipeer.swift b/Blink/Blink_iOS/Multipeer.swift new file mode 100644 index 0000000..753e5c5 --- /dev/null +++ b/Blink/Blink_iOS/Multipeer.swift @@ -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() + + } +}