internal static PeerNearMe PEER_PEOPLE_NEAR_METoPeerNearMe(PEER_PEOPLE_NEAR_ME ppnm) { PeerNearMe peerNearMe = new PeerNearMe(); peerNearMe.Id = CollaborationHelperFunctions.ConvertGUIDToGuid(ppnm.id); peerNearMe.Nickname = Marshal.PtrToStringUni(ppnm.pwzNickname);; PEER_ENDPOINT pe = ppnm.endpoint; PeerEndPoint peerEP = ConvertPEER_ENDPOINTToPeerEndPoint(pe); peerNearMe.PeerEndPoints.Add(peerEP); return(peerNearMe); }
internal static PeerNearMe PEER_PEOPLE_NEAR_METoPeerNearMe(PEER_PEOPLE_NEAR_ME ppnm) { PeerNearMe peerNearMe = new PeerNearMe(); peerNearMe.Id = CollaborationHelperFunctions.ConvertGUIDToGuid(ppnm.id); peerNearMe.Nickname = Marshal.PtrToStringUni(ppnm.pwzNickname); ; PEER_ENDPOINT pe = ppnm.endpoint; PeerEndPoint peerEP = ConvertPEER_ENDPOINTToPeerEndPoint(pe); peerNearMe.PeerEndPoints.Add(peerEP); return peerNearMe; }
private static void PeerNearMeChangedCallback(object state, bool timedOut) { SafeCollabData eventData = null; int errorCode = 0; Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "PeerNearMeChangedCallback() called."); while (true) { PeerNearMeChangedEventArgs peerNearMeChangedArgs = null; // // Get the event data for the fired event // try{ lock (LockPNMChangedEvent){ if (s_safePeerNearMeChangedEvent.IsInvalid) { return; } errorCode = UnsafeCollabNativeMethods.PeerCollabGetEventData(s_safePeerNearMeChangedEvent, out eventData); } if (errorCode == UnsafeCollabReturnCodes.PEER_S_NO_EVENT_DATA) { break; } else if (errorCode != 0) { Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerCollabGetEventData returned with errorcode {0}", errorCode); throw PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_GetPeerNearMeChangedDataFailed), errorCode); } PEER_COLLAB_EVENT_DATA ped = (PEER_COLLAB_EVENT_DATA)Marshal.PtrToStructure(eventData.DangerousGetHandle(), typeof(PEER_COLLAB_EVENT_DATA)); if (ped.eventType == PeerCollabEventType.PeopleNearMeChanged) { PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA pnmData = ped.peopleNearMeChangedData; PeerNearMe peerNearMe = null; if (pnmData.pPeopleNearMe != IntPtr.Zero) { PEER_PEOPLE_NEAR_ME pnm = (PEER_PEOPLE_NEAR_ME)Marshal.PtrToStructure(pnmData.pPeopleNearMe, typeof(PEER_PEOPLE_NEAR_ME)); peerNearMe = CollaborationHelperFunctions.PEER_PEOPLE_NEAR_METoPeerNearMe(pnm); } peerNearMeChangedArgs = new PeerNearMeChangedEventArgs(peerNearMe, pnmData.changeType); } } finally{ if (eventData != null) { eventData.Dispose(); } } // // Fire the callback with the marshalled event args data // EventHandler <PeerNearMeChangedEventArgs> handlerCopy = s_peerNearMeChanged; if ((peerNearMeChangedArgs != null) && (handlerCopy != null)) { handlerCopy(null, peerNearMeChangedArgs); Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Fired the peer near me changed event callback."); } } Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Leaving PeerNearMeChangedCallback()."); }