private void SetupPeer() { peerObject = new PeerObject() { Id = id, PeerScope = PeerScope }; }
private void ClosePeer() { if (!PeerOpened) { return; } PeerNearMe.PeerNearMeChanged -= PeerNearMe_PeerNearMeChanged; PeerCollaboration.SignOut(PeerScope); peerObject.Dispose(); peerObject = null; }
public static PeerObjectCollection GetLocalSetObjects() { Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Entering GetLocalSetObjects."); PeerCollaborationPermission.UnrestrictedPeerCollaborationPermission.Demand(); CollaborationHelperFunctions.Initialize(); PeerObjectCollection peerObjectColl = new PeerObjectCollection(); SafeCollabEnum handlePeerEnum = null; UInt32 objectCount = 0; int errorCode = 0; // // Enumerate through all the objects from native // try{ errorCode = UnsafeCollabNativeMethods.PeerCollabEnumObjects(IntPtr.Zero, IntPtr.Zero, out handlePeerEnum); if (errorCode != 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerCollabEnumObjects returned with errorcode {0}", errorCode); throw PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_GetLocalObjectsFailed), errorCode); } errorCode = UnsafeCollabNativeMethods.PeerGetItemCount(handlePeerEnum, ref objectCount); if (errorCode != 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerGetItemCount returned with errorcode {0}", errorCode); throw PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_GetLocalObjectsFailed), errorCode); } if (objectCount == 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "No local PeerObjects found."); return peerObjectColl; } unsafe{ SafeCollabData objectArray = null; try{ errorCode = UnsafeCollabNativeMethods.PeerGetNextItem(handlePeerEnum, ref objectCount, out objectArray); if (errorCode != 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerGetNextItem returned with errorcode {0}", errorCode); throw PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_GetLocalObjectsFailed), errorCode); } // // Marshal each object from the array // IntPtr pPEER_OBJECT = objectArray.DangerousGetHandle(); IntPtr* pObjects = (IntPtr*)pPEER_OBJECT; for (ulong i = 0; i < objectCount; i++){ PEER_OBJECT* pPeerObject = (PEER_OBJECT*)pObjects[i]; byte[] data = null; if (pPeerObject->data.cbData != 0){ data = new byte[pPeerObject->data.cbData]; Marshal.Copy(pPeerObject->data.pbData, data, 0, (int)pPeerObject->data.cbData); } PeerObject peerObject = new PeerObject(CollaborationHelperFunctions.ConvertGUIDToGuid(pPeerObject->guid), data, (PeerScope)pPeerObject->dwPublicationScope); peerObjectColl.Add(peerObject); } } finally{ objectArray.Dispose(); } } } finally{ handlePeerEnum.Dispose(); } Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Returning collection with {0} objects", peerObjectColl.Count); return peerObjectColl; }
public static void DeleteObject(PeerObject peerObject) { PeerCollaborationPermission.UnrestrictedPeerCollaborationPermission.Demand(); if (peerObject == null){ throw new ArgumentNullException("peerObject"); } CollaborationHelperFunctions.Initialize(); if (Logging.P2PTraceSource.Switch.ShouldTrace(TraceEventType.Information)){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "DeleteObject() is called with the following info"); peerObject.TracePeerObject(); } GUID guid = CollaborationHelperFunctions.ConvertGuidToGUID(peerObject.Id); int errorCode = UnsafeCollabNativeMethods.PeerCollabDeleteObject(ref guid); if (errorCode != 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerCollabDeleteObject returned with errorcode {0}", errorCode); throw (PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_ObjectDeleteFailed), errorCode)); } Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Delete Object successful."); }
public static void SetObject(PeerObject peerObject) { PeerCollaborationPermission.UnrestrictedPeerCollaborationPermission.Demand(); if (peerObject == null){ throw new ArgumentNullException("peerObject"); } CollaborationHelperFunctions.Initialize(); if (Logging.P2PTraceSource.Switch.ShouldTrace(TraceEventType.Information)){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "SetObject() is called with the following info"); peerObject.TracePeerObject(); } PEER_OBJECT po = new PEER_OBJECT(); int errorCode = 0; // // Create the native PEER_OBJECT struct // po.guid = CollaborationHelperFunctions.ConvertGuidToGUID(peerObject.Id); po.dwPublicationScope = (uint)peerObject.PeerScope; SafeCollabMemory data = null; try{ if ((peerObject.Data != null) && (peerObject.Data.Length > 0)){ data = new SafeCollabMemory(peerObject.Data.Length); po.data.pbData = data.DangerousGetHandle(); po.data.cbData = (UInt32)peerObject.Data.Length; Marshal.Copy(peerObject.Data, 0, po.data.pbData, peerObject.Data.Length); } else{ po.data.pbData = IntPtr.Zero; po.data.cbData = 0; } errorCode = UnsafeCollabNativeMethods.PeerCollabSetObject(ref po); } finally{ if (data != null) data.Dispose(); } if (errorCode == UnsafeCollabReturnCodes.PEER_E_ALREADY_EXISTS){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerCollabSetObject returned with errorcode {0}. Object already set.", errorCode); throw new ArgumentException(SR.GetString(SR.Collab_ObjectSetFailed) + " " + SR.GetString(SR.Collab_ObjectExists)); } else if (errorCode != 0){ Logging.P2PTraceSource.TraceEvent(TraceEventType.Error, 0, "PeerCollabSetObject returned with errorcode {0}", errorCode); throw (PeerToPeerException.CreateFromHr(SR.GetString(SR.Collab_ObjectSetFailed), errorCode)); } Logging.P2PTraceSource.TraceEvent(TraceEventType.Information, 0, "Set Object successful."); }
void AddLog(string nickname, PeerObject peerObject) { AddLog(nickname, peerObject.Data, LogType.Received); }
void AddLog(PeerContact peerContact, PeerObject peerObject) { AddLog(peerContact.Nickname, peerObject); }
void AddLog(PeerNearMe peerNearMe, PeerObject peerObject) { AddLog(peerNearMe.Nickname, peerObject); }
private void ClosePeer() { if (!PeerOpened) return; PeerNearMe.PeerNearMeChanged -= PeerNearMe_PeerNearMeChanged; PeerCollaboration.SignOut(PeerScope); peerObject.Dispose(); peerObject = null; }