Пример #1
0
        internal static V_RESULT CopyOut(IntPtr fromPtr, IntPtr toPtr)
        {
            v_readerStatus from = (v_readerStatus)Marshal.PtrToStructure(fromPtr, type);

            GCHandle toGCHandle = GCHandle.FromIntPtr(toPtr);

            DDS.OpenSplice.Common.ReaderStatus to = toGCHandle.Target as DDS.OpenSplice.Common.ReaderStatus;

            V_RESULT result = CopyOut(ref from, to);

            toGCHandle.Target = to;
            return(result);
        }
Пример #2
0
        internal static V_RESULT CopyOut(ref v_readerStatus from, DDS.OpenSplice.Common.ReaderStatus to)
        {
            to.State             = (uint)from._parent.state;
            to.LivelinessChanged = new LivelinessChangedStatus();
            to.SampleRejected    = new SampleRejectedStatus();
            to.SampleLost        = new SampleLostStatus();
            to.DeadlineMissed    = new RequestedDeadlineMissedStatus();
            to.IncompatibleQos   = new RequestedIncompatibleQosStatus();
            to.SubscriptionMatch = new SubscriptionMatchedStatus();

            LivelinessChangedStatusMarshaler.CopyOut(ref from.livelinessChanged, to.LivelinessChanged);
            SampleRejectedStatusMarshaler.CopyOut(ref from.sampleRejected, to.SampleRejected);
            SampleLostStatusMarshaler.CopyOut(ref from.sampleLost, to.SampleLost);
            RequestedDeadlineMissedStatusMarshaler.CopyOut(ref from.deadlineMissed, to.DeadlineMissed);
            RequestedIncompatibleQosStatusMarshaler.CopyOut(ref from.incompatibleQos, to.IncompatibleQos);
            SubscriptionMatchedStatusMarshaler.CopyOut(ref from.subscriptionMatch, to.SubscriptionMatch);
            return(V_RESULT.OK);
        }
        internal void EventHandler(IntPtr EventPtr, IntPtr arg)
        {
            const uint topicTrigger  = (uint)(V_EVENT.INCONSISTENT_TOPIC | V_EVENT.ALL_DATA_DISPOSED);
            const uint writerTrigger = (uint)(V_EVENT.OFFERED_DEADLINE_MISSED | V_EVENT.LIVELINESS_LOST |
                                              V_EVENT.OFFERED_INCOMPATIBLE_QOS | V_EVENT.PUBLICATION_MATCHED);
            const uint readerTrigger = (uint)(V_EVENT.SAMPLE_REJECTED | V_EVENT.LIVELINESS_CHANGED |
                                              V_EVENT.SAMPLE_LOST | V_EVENT.REQUESTED_DEADLINE_MISSED |
                                              V_EVENT.REQUESTED_INCOMPATIBLE_QOS | V_EVENT.SUBSCRIPTION_MATCHED);

            // The DATA_AVAILABLE and DATA_ON_READERS events are left out of the readerTrigger because
            // they don't have a v_readerStatus that has to be copied.

            Debug.Assert(EventPtr != IntPtr.Zero);
            v_listenerEvent listenerEvent = Marshal.PtrToStructure(EventPtr, listenerEventType) as v_listenerEvent;

            if (listenerEvent.kind == (uint)V_EVENT.TRIGGER)
            {
                // Nothing to deliver, so ignore.
                return;
            }

            ListenerEvent ev = new ListenerEvent(listenerEvent.kind);

            ev.Source = SacsSuperClass.fromUserData(listenerEvent.source) as Entity;
            if (ev.Source == null)
            {
                // Apparently the Source Entity has already been deleted.
                return;
            }
            if ((listenerEvent.kind & (uint)(V_EVENT.OBJECT_DESTROYED | V_EVENT.PREPARE_DELETE)) == 0)
            {
                ev.Target = SacsSuperClass.fromUserData(listenerEvent.userData) as Entity;
                if (listenerEvent.eventData != IntPtr.Zero)
                {
                    if ((listenerEvent.kind & topicTrigger) != 0)
                    {
                        v_topicStatus vTopicStatus = (v_topicStatus)Marshal.PtrToStructure(listenerEvent.eventData, typeof(v_topicStatus)) as v_topicStatus;
                        TopicStatus   topicStatus  = new TopicStatus();
                        vTopicStatusMarshaler.CopyOut(ref vTopicStatus, topicStatus);
                        ev.Status = topicStatus;
                    }
                    else if ((listenerEvent.kind & writerTrigger) != 0)
                    {
                        v_writerStatus vWriterStatus = (v_writerStatus)Marshal.PtrToStructure(listenerEvent.eventData, typeof(v_writerStatus)) as v_writerStatus;
                        WriterStatus   writerStatus  = new WriterStatus();
                        vWriterStatusMarshaler.CopyOut(ref vWriterStatus, writerStatus);
                        ev.Status = writerStatus;
                    }
                    else if ((listenerEvent.kind & readerTrigger) != 0)
                    {
                        v_readerStatus vReaderStatus = (v_readerStatus)Marshal.PtrToStructure(listenerEvent.eventData, typeof(v_readerStatus)) as v_readerStatus;
                        ReaderStatus   readerStatus  = new ReaderStatus();
                        vReaderStatusMarshaler.CopyOut(ref vReaderStatus, readerStatus);
                        ev.Status = readerStatus;
                    }
                    else
                    {
                        v_status     vStatus = (v_status)Marshal.PtrToStructure(listenerEvent.eventData, typeof(v_status)) as v_status;
                        EntityStatus status  = new EntityStatus();
                        vStatusMarshaler.CopyOut(ref vStatus, status);
                        ev.Status = status;
                    }
                }
                else
                {
                    ev.Status = null;
                }
            }

            Events.Add(ev);
        }