Multipeer Connectivity Framework рдЖрд╕-рдкрд╛рд╕ рдХреЗ iOS рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рда рд╕рдВрджреЗрд╢, рд╕реНрдЯреНрд░реАрдо рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ, рдбрд╛рдпрд░реЗрдХреНрдЯ рд╡рд╛рдИрдПрдлрдЖрдИ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдмреНрд▓реВрдЯреВрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд┐рднрд┐рдиреНрди рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдирдВрдмрд░ 2 рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╛рдИрдлрд╛рдИ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдирдВрдмрд░ 3 рдореЗрдВ рдХреЗрд╡рд▓ рдмреНрд▓реВрдЯреВрде рд╣реИред рдЕрдЧрд░ рд╡рд╛рдИрдлрд╝рд╛рдИ рдФрд░ рдмреНрд▓реВрдЯреВрде рдХреЗ рд╕рд╛рде рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдХреЗ рднреАрддрд░ рдПрдХ рддреАрд╕рд░рд╛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рд╣реИ, рддреЛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдирдВрдмрд░ 2 рдФрд░ рдирдВрдмрд░ 3 рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╡рд┐рдирд┐рдордп рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ
рдбреЗрдЯрд╛ред
MCAdvertiserAssistant рд╡рд░реНрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрдЬ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░
MCBrowserViewController рд╡рд░реНрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдПрдХ рд╕рддреНрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ MCNearbyServiceAdvertiser рдФрд░ MCNearbyServiceBrowser рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрдЗрдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рд░реНрдЪ рдХрд░реЗрдЧрд╛ред
void StartMultipeerBrowser () { peer = new MCPeerID ("Monkey"); session = new MCSession (peer); session.Delegate = sessionDelegate; browser = new MCBrowserViewController (serviceType, session); browser.Delegate = browserDelegate; browser.ModalPresentationStyle = UIModalPresentationStyle.FormSheet; PresentViewController (browser, true, null); }
MVBrowserViewController рдкрд╛рдпрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд┐рдбрд╝рдХреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рджреВрд░рд╕реНрде рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЯреИрдк рдХрд░рдХреЗ, рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рдордВрддреНрд░рдг рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред

MCSession рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХрдиреЗрдХреНрд╢рди, рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред
class MySessionDelegate : MCSessionDelegate { public override void DidChangeState (MCSession session, MCPeerID peerID, MCSessionState state) { switch (state) { case MCSessionState.Connected: Console.WriteLine ("Connected: {0}", peerID.DisplayName); break; case MCSessionState.Connecting: Console.WriteLine ("Connecting: {0}", peerID.DisplayName); break; case MCSessionState.NotConnected: Console.WriteLine ("Not Connected: {0}", peerID.DisplayName); break; } } public override void DidReceiveData (MCSession session, NSData data, MCPeerID peerID) { InvokeOnMainThread (() => { var alert = new UIAlertView ("", data.ToString (), null, "OK"); alert.Show (); }); } ... }
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрдЬ рд╡рд┐рдВрдбреЛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ MCBrowserViewController рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрдЬ рд╡рд┐рдВрдбреЛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
class MyBrowserDelegate : MCBrowserViewControllerDelegate { public override void DidFinish (MCBrowserViewController browserViewController) { InvokeOnMainThread (() => { browserViewController.DismissViewController (true, null); }); } public override void WasCancelled (MCBrowserViewController browserViewController) { InvokeOnMainThread (() => { browserViewController.DismissViewController (true, null); }); } }
рдЖрдЗрдП рджреВрд╕рд░рд╛ рдЙрдкрдХрд░рдг рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВ:
void StartMultipeerAdvertiser () { peer = new MCPeerID ("Player1"); session = new MCSession (peer); session.Delegate = sessionDelegate; assistant = new MCAdvertiserAssistant (serviceType, dict, session); assistant.Start (); }
рдЬрдм рдПрдХреНрд╕рдЪреЗрдВрдЬ рдбреЗрдЯрд╛ рдХрд╛ рдирд┐рдордВрддреНрд░рдг рдЖрддрд╛ рд╣реИ, MCAdvertiserAssistant рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╣рдорддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдЧрд╛ред

рдПрдХ рдмрд╛рд░ рд╕рддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рд╕рдВрджреЗрд╢, рдереНрд░реЗрдб рдпрд╛ рд╕рдВрд╕рд╛рдзрди рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЙрджрд╛рд╣рд░рдг
void SendMessage () { var message = NSData.FromString ( String.Format ("{0} found the monkey", peer.DisplayName)); NSError error; session.SendData (message, session.ConnectedPeers, MCSessionSendDataMode.Reliable, out error); }
рд╕рдВрд╕рд╛рдзрди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
sendResourceAtUrl рд╡рд┐рдзрд┐ рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ NSUrl рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрди рд╣реЛ рд╕рдХрддреА рд╣реИред
StartStreamWithName рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рд┐рд░реЛрдВ рдкрд░ рдПрдХ NSOutputStream рдФрд░ NSInputStream рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рд╕реЗ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред