public void CalculateCurrentLevelPercentage() { var expForNextWriterLevel = ExperienceTable[WritingLevel + 1]; CurrentLevelPercentage = (WritingExperience * 100) / expForNextWriterLevel; if (CurrentLevelPercentage >= 1) { WritingLevel += 1; } var expForNextLevel = (float)WriterStatus + 1; var currentLevelWriterStatusPercentage = (WritingExperience * 100) / expForNextLevel; if (currentLevelWriterStatusPercentage >= 100) { WriterStatus nextLevel = Enum.GetValues(typeof(WriterStatus)).Cast <WriterStatus>() .First(val => (int)val > (int)WriterStatus); WriterStatus = nextLevel; } }
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); }