예제 #1
0
        public void UpdateMessages()
        {
            VerifyObjectIsNotDisposed();
            //
            libvlc_exception_t exc = new libvlc_exception_t();

            LibVlcInterop.libvlc_exception_init(ref exc);
            IntPtr iterator = LibVlcInterop.libvlc_log_get_iterator(descriptor, ref exc);

            if (exc.b_raised != 0)
            {
                throw new VlcInternalException(exc.Message);
            }
            //
            try {
                while (0 != LibVlcInterop.libvlc_log_iterator_has_next(iterator, ref exc))
                {
                    if (exc.b_raised != 0)
                    {
                        throw new VlcInternalException(exc.Message);
                    }
                    //
                    libvlc_log_message_t messageBuffer = new libvlc_log_message_t();
                    messageBuffer.sizeof_msg = Convert.ToUInt32(Marshal.SizeOf(typeof(libvlc_log_message_t)));
                    IntPtr ptrStructRes = LibVlcInterop.libvlc_log_iterator_next(iterator, ref messageBuffer, ref exc);
                    if (exc.b_raised != 0)
                    {
                        throw new VlcInternalException(exc.Message);
                    }
                    //
                    libvlc_log_message_t msgRes = (libvlc_log_message_t)Marshal.PtrToStructure(ptrStructRes, typeof(libvlc_log_message_t));
                    string text = String.Format("{0} {1} {2} : {3}", msgRes.Type, msgRes.Name, msgRes.Header, msgRes.Message);
                    //
                    switch (msgRes.Severity)
                    {
                    case libvlc_log_messate_t_severity.INFO: {
                        // INFO
                        logger.Info(text);
                        break;
                    }

                    case libvlc_log_messate_t_severity.ERR: {
                        // ERR
                        logger.Error(text);
                        break;
                    }

                    case libvlc_log_messate_t_severity.WARN: {
                        // WARN
                        logger.Warn(text);
                        break;
                    }

                    case libvlc_log_messate_t_severity.DBG: {
                        // DBG
                        logger.Debug(text);
                        break;
                    }

                    default: {
                        logger.Trace("Unknown severity : " + text);
                        break;
                    }
                    }
                }
            } finally {
                LibVlcInterop.libvlc_log_iterator_free(iterator, ref exc);
            }
        }