2017-12-20 1 views
0

스위프트 4에서 멀티 페어 연결을 사용하고 있습니다. 프로그램을 실행할 때 발견 된 장치를 보는 방법이 궁금합니다. 조금 도움이되지만 여전히 이해가되지 않습니다. 그것의 모든.멀티플렉서 연결 - 발견 된 장치를 보는 방법

import UIKit 
import PlaygroundSupport 
import MultipeerConnectivity 
PlaygroundPage.current.needsIndefiniteExecution = true 
var peerID: MCPeerID! 
var mcSession: MCSession! 
var mcAdvertiserAssistant: MCAdvertiserAssistant! 
var foundPeers = [MCPeerID]() 


class viewcontroller: UIViewController { 
override func viewDidLoad() { 
    var serviceBrowser : MCBrowserViewController! 
    func startBrowsingForPeer() { 
     serviceBrowser = MCBrowserViewController(serviceType: "lightning417techa", session: mcSession) 

     serviceBrowser.delegate.self 

    } 



    peerID = MCPeerID(displayName: UIDevice.current.name) 
    mcSession = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .none) 
    mcSession.delegate.self 

    class ViewController: UIViewController, MCSessionDelegate, MCBrowserViewControllerDelegate { 



     let session = MCSession(peer: peerID, 
           securityIdentity: nil, 
           encryptionPreference: .none) 



     func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) { 
      switch state { 
      case MCSessionState.connected: 
       print("Connected: \(peerID.displayName)") 
      case MCSessionState.connecting: 
       print("Connecting: \(peerID.displayName)") 
      case MCSessionState.notConnected: 
       print("Not Connected: \(peerID.displayName)") 
      } 
     } 

     func browser(browser: MCNearbyServiceBrowser!, foundPeer peerID: MCPeerID!, withDiscoveryInfo info: [NSObject : AnyObject]!) { 
      foundPeers.append(peerID) 

      print(browser) 
     } 


     func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) { 
      if let image = UIImage(data: data) { 
       DispatchQueue.main.async { [unowned self] in 
        print("image recieved") 
       } 
      } 
     } 
     func sendImage(img: UIImage) { 
      if mcSession.connectedPeers.count > 0 { 
       if let imageData = UIImagePNGRepresentation(img) { 
        do { 
         try mcSession.send(imageData, 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) 
        } 
       } 
      } 
     } 

     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?) { 
     } 
     func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) { 
      dismiss(animated: true) 
     } 
     func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) { 
      dismiss(animated: true) 
     } 


     func startHosting(action: UIAlertAction!) { 
      mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "hws-ridleyn", discoveryInfo: nil, session: mcSession) 
      mcAdvertiserAssistant.start() 
     } 
     func joinSession(action: UIAlertAction!) { 
      let mcBrowser = MCBrowserViewController(serviceType: "hws-ridleyn", session: mcSession) 
      mcBrowser.delegate = self 
      present(mcBrowser, animated: true) 
     } 

     let vc = UIToolbar(frame: CGRect(x: 100, y: 100, width: 200, height: 200)) 


     // your view controller here 
    } 


    let vcc = ViewController() 
    vcc.startHosting(action: nil) 
    ViewController.startHosting(vcc) 

    } 
} 



PlaygroundPage.current 

extension viewcontroller : MCBrowserViewControllerDelegate { 
func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {   
serviceBrowser.dismiss(animated: true, completion: nil) 
} 
func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) { 
serviceBrowser.dismiss(animated: true, completion: nil) 
} 

} 
:

여기
extension viewcontroller : MCBrowserViewControllerDelegate { 
func browserViewControllerDidFinish(_ browserViewController:       
MCBrowserViewController) { 
serviceBrowser.dismiss(animated: true, completion: nil) 
} 
func browserViewControllerWasCancelled(_ browserViewController: 
MCBrowserViewController) { 
serviceBrowser.dismiss(animated: true, completion: nil) 
} 

}   

필요한 경우 내 전체 코드, 코드를 수정하시기 바랍니다있다가, 나는 또한 아래의 코드의 맨 아래에있는 확장을 넣어 : 나는이를 넣어 위치를 모른다

방금 ​​확장 기능을 편집했지만 serviceBrowser이 다소 잘못되어이 파일을 NetServiceBrowser으로 바꾸려고합니다. 그래서 내가 그 일을했을 때 NetServiceBrowser에는 회원이 없다. dismiss.

답변

0

MCSession에는 connectedPeers라는 변수가 있습니다.

var connectedPeers : [MCPeerID] 현재이 세션에 연결된 모든 피어의 배열입니다.

Apple documentation - MCSession class

관련 문제