internal static V_RESULT CopyOut(IntPtr fromPtr, IntPtr toPtr) { v_writerStatus from = (v_writerStatus)Marshal.PtrToStructure(fromPtr, type); GCHandle toGCHandle = GCHandle.FromIntPtr(toPtr); DDS.OpenSplice.Common.WriterStatus to = toGCHandle.Target as DDS.OpenSplice.Common.WriterStatus; V_RESULT result = CopyOut(ref from, to); toGCHandle.Target = to; return(result); }
internal static V_RESULT CopyOut(ref v_writerStatus from, DDS.OpenSplice.Common.WriterStatus to) { to.State = (uint)from._parent.state; to.LivelinessLost = new LivelinessLostStatus(); to.DeadlineMissed = new OfferedDeadlineMissedStatus(); to.IncompatibleQos = new OfferedIncompatibleQosStatus(); to.PublicationMatch = new PublicationMatchedStatus(); LivelinessLostStatusMarshaler.CopyOut(ref from.livelinessLost, to.LivelinessLost); OfferedDeadlineMissedStatusMarshaler.CopyOut(ref from.deadlineMissed, to.DeadlineMissed); OfferedIncompatibleQosStatusMarshaler.CopyOut(ref from.incompatibleQos, to.IncompatibleQos); PublicationMatchedStatusMarshaler.CopyOut(ref from.publicationMatch, to.PublicationMatch); 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); }