Skip to content

Instantly share code, notes, and snippets.

@fitomad
Created June 25, 2020 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fitomad/0d1d92f58796aae9524b3fd0488c1c21 to your computer and use it in GitHub Desktop.
Save fitomad/0d1d92f58796aae9524b3fd0488c1c21 to your computer and use it in GitHub Desktop.
// 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