Esempio n. 1
0
 private void SetupPeer()
 {
     peerObject = new PeerObject()
     {
         Id        = id,
         PeerScope = PeerScope
     };
 }
 private void SetupPeer()
 {
     peerObject = new PeerObject()
     {
         Id = id,
         PeerScope = PeerScope
     };
 }
Esempio n. 3
0
        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.");
        }
Esempio n. 7
0
 void AddLog(string nickname, PeerObject peerObject)
 {
     AddLog(nickname, peerObject.Data, LogType.Received);
 }
Esempio n. 8
0
 void AddLog(PeerContact peerContact, PeerObject peerObject)
 {
     AddLog(peerContact.Nickname, peerObject);
 }
Esempio n. 9
0
 void AddLog(PeerNearMe peerNearMe, PeerObject peerObject)
 {
     AddLog(peerNearMe.Nickname, peerObject);
 }
 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;
        }