// nVLC
//
// Author: Roman Ginzburg
//
// nVLC is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// nVLC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// ========================================================================
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Declarations;
using Declarations.Events;
using LibVlcWrapper;
namespace Implementation.Events
{
internal abstract class EventManager
{
protected IEventProvider m_eventProvider;
List<VlcEventHandlerDelegate> m_callbacks = new List<VlcEventHandlerDelegate>();
IntPtr hCallback1;
protected EventManager(IEventProvider eventProvider)
{
m_eventProvider = eventProvider;
VlcEventHandlerDelegate callback1 = MediaPlayerEventOccured;
hCallback1 = Marshal.GetFunctionPointerForDelegate(callback1);
m_callbacks.Add(callback1);
}
protected void Attach(libvlc_event_e eType)
{
if (LibVlcMethods.libvlc_event_attach(m_eventProvider.EventManagerHandle, eType, hCallback1, IntPtr.Zero) != 0)
{
throw new OutOfMemoryException("Failed to subscribe to event notification");
}
}
protected void Dettach(libvlc_event_e eType)
{
LibVlcMethods.libvlc_event_detach(m_eventProvider.EventManagerHandle, eType, hCallback1, IntPtr.Zero);
}
protected abstract void MediaPlayerEventOccured(ref libvlc_event_t libvlc_event, IntPtr userData);
}
}