-
-
Save fitomad/0d1d92f58796aae9524b3fd0488c1c21 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// CercaViewModel | |
... | |
/** | |
Arrancamos las sesiones de `NearbyInteraction` | |
y de `MultipeerConnectivity` | |
*/ | |
override internal init() | |
{ | |
// Avoid any simulator instances from finding any actual devices. | |
#if targetEnvironment(simulator) | |
self.serviceIdentity = "com.desappstre.Cerca./simulator_ni" | |
#else | |
self.serviceIdentity = "com.desappstre.Cerca./device_ni" | |
#endif | |
super.init() | |
self.startNearbySession() | |
self.startMultipeerSession() | |
} | |
/** | |
Arranca la sesión de `NearbyInteraction`. | |
También se inicia la sesión de `MultipeerConectivity` | |
en caso que sea la primera vez que se inica la app. | |
*/ | |
internal func startNearbySession() -> Void | |
{ | |
// 1. Creamos la NISession. | |
self.nearbySession = NISession() | |
// 2. Ahora el delegado. | |
// Recibimos datos sobre el estado de la sesión | |
self.nearbySession?.delegate = self | |
// Es una nueva sesión así que tendremos que | |
// intercambiar nuestro token. | |
sharedTokenWithPeer = false | |
// 3. Si la variable `peer` existe es porque se ha reiniciado | |
// la sesión así que tenemos qque volver a compartir el token. | |
if self.peer != nil && self.multipeerSession != nil | |
{ | |
if !self.sharedTokenWithPeer | |
{ | |
shareTokenWithAllPeers() | |
} | |
} | |
else | |
{ | |
self.startMultipeerSession() | |
} | |
} | |
/** | |
Arranca la sesión de `MultipeerConnectivity` | |
Lo principal son los tres objetos que se crean aquí | |
* `MCSession`: La sesión de MultipeerConnectivity | |
* `MCNearbyServiceAdvertiser`: Se encarga de decir a todos que | |
estamos aquí. | |
* `MCNearbyServiceBrowser`: Nos dice si hay otros dispositivos | |
ahí fuera. | |
Todos estos objetos tienen sus respectivos delegados | |
**donde recibimos actualizaión del estado** de todo lo relacionado | |
con `MultipeerConnectivity` | |
*/ | |
private func startMultipeerSession() -> Void | |
{ | |
if self.multipeerSession == nil | |
{ | |
let localPeer = MCPeerID(displayName: UIDevice.current.name) | |
// 4 | |
self.multipeerSession = MCSession(peer: localPeer, | |
securityIdentity: nil, | |
encryptionPreference: .required) | |
// 5 | |
self.multipeerAdvertiser = MCNearbyServiceAdvertiser(peer: localPeer, | |
discoveryInfo: [ "identity" : serviceIdentity], | |
serviceType: "desappstrecerca") | |
// 6 | |
self.multipeerBrowser = MCNearbyServiceBrowser(peer: localPeer, | |
serviceType: "desappstrecerca") | |
// 7 | |
self.multipeerSession?.delegate = self | |
self.multipeerAdvertiser?.delegate = self | |
self.multipeerBrowser?.delegate = self | |
} | |
self.stopMultipeerSession() | |
// 8 | |
self.multipeerAdvertiser?.startAdvertisingPeer() | |
self.multipeerBrowser?.startBrowsingForPeers() | |
} | |
... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment