private void OnSessionStatusChanged(WiFiDirectServiceSession sender, object args) { try { ThrowIfDisposed(); manager.NotifyUser("Session Status Changed to " + session.Status.ToString(), NotifyType.StatusMessage); if (session.Status == WiFiDirectServiceSessionStatus.Closed) { sessionClosedEvent.Set(); // Cleanup manager.RemoveSession(this); } } catch (Exception ex) { manager.NotifyUser("OnSessionStatusChanged Failed: " + ex.Message, NotifyType.ErrorMessage); } }
public SessionWrapper( WiFiDirectServiceSession session, WiFiDirectServiceManager manager) { this.session = session; this.manager = manager; this.session.SessionStatusChanged += OnSessionStatusChanged; this.session.RemotePortAdded += OnRemotePortAdded; }
// This will fire when the connected peer attempts to open a port for this connection // The peer should start a stream socket listener (for TCP) private async void OnRemotePortAdded(WiFiDirectServiceSession sender, WiFiDirectServiceRemotePortAddedEventArgs args) { try { ThrowIfDisposed(); var endpointPairCollection = args.EndpointPairs; var protocol = args.Protocol; if (endpointPairCollection.Count == 0) { manager.NotifyUser("No endpoint pairs for remote port added event", NotifyType.ErrorMessage); return; } manager.NotifyUser(String.Format("{0} Port {1} Added by remote peer", (protocol == WiFiDirectServiceIPProtocol.Tcp) ? "TCP" : ((protocol == WiFiDirectServiceIPProtocol.Udp) ? "UDP" : "???"), endpointPairCollection[0].RemoteServiceName ), NotifyType.StatusMessage ); SocketWrapper socketWrapper = null; if (args.Protocol == WiFiDirectServiceIPProtocol.Tcp) { // Connect to the stream socket listener StreamSocket streamSocket = new StreamSocket(); socketWrapper = new SocketWrapper(manager, streamSocket, null); manager.NotifyUser("Connecting to stream socket...", NotifyType.StatusMessage); await streamSocket.ConnectAsync(endpointPairCollection[0]); // Start receiving messages recursively var rcv = socketWrapper.ReceiveMessageAsync(); manager.NotifyUser("Stream socket connected", NotifyType.StatusMessage); } else if (args.Protocol == WiFiDirectServiceIPProtocol.Udp) { // Connect a socket over UDP DatagramSocket datagramSocket = new DatagramSocket(); socketWrapper = new SocketWrapper(manager, null, datagramSocket); manager.NotifyUser("Connecting to datagram socket...", NotifyType.StatusMessage); await datagramSocket.ConnectAsync(endpointPairCollection[0]); manager.NotifyUser("Datagram socket connected", NotifyType.StatusMessage); } else { manager.NotifyUser("Bad protocol for remote port added event", NotifyType.ErrorMessage); return; } socketList.Add(socketWrapper); // Update manager so UI can add to list manager.AddSocket(socketWrapper); } catch (Exception ex) { manager.NotifyUser("OnRemotePortAdded Failed: " + ex.Message, NotifyType.ErrorMessage); } }
public WiFiDirectServiceSessionEvents(WiFiDirectServiceSession This) { this.This = This; }