// 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