mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
376 lines
No EOL
10 KiB
C#
376 lines
No EOL
10 KiB
C#
using System;
|
|
using Dalamud.Logging;
|
|
using Dalamud.Plugin;
|
|
using Dalamud.Plugin.Ipc;
|
|
|
|
namespace Penumbra.Api.Helpers;
|
|
|
|
public sealed class EventProvider : IDisposable
|
|
{
|
|
private ICallGateProvider< object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, (Action< Action > Add, Action< Action > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke()
|
|
=> _provider?.SendMessage();
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
}
|
|
|
|
public sealed class EventProvider< T1 > : IDisposable
|
|
{
|
|
private ICallGateProvider< T1, object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, (Action< Action< T1 > > Add, Action< Action< T1 > > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke( T1 a )
|
|
=> _provider?.SendMessage( a );
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action< T1 > > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
}
|
|
|
|
public sealed class EventProvider< T1, T2 > : IDisposable
|
|
{
|
|
private ICallGateProvider< T1, T2, object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label,
|
|
(Action< Action< T1, T2 > > Add, Action< Action< T1, T2 > > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke( T1 a, T2 b )
|
|
=> _provider?.SendMessage( a, b );
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action< T1, T2 > > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
}
|
|
|
|
public sealed class EventProvider< T1, T2, T3 > : IDisposable
|
|
{
|
|
private ICallGateProvider< T1, T2, T3, object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label,
|
|
(Action< Action< T1, T2, T3 > > Add, Action< Action< T1, T2, T3 > > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke( T1 a, T2 b, T3 c )
|
|
=> _provider?.SendMessage( a, b, c );
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action< T1, T2, T3 > > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
}
|
|
|
|
public sealed class EventProvider< T1, T2, T3, T4 > : IDisposable
|
|
{
|
|
private ICallGateProvider< T1, T2, T3, T4, object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label,
|
|
(Action< Action< T1, T2, T3, T4 > > Add, Action< Action< T1, T2, T3, T4 > > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, T4, object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, T4, object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke( T1 a, T2 b, T3 c, T4 d )
|
|
=> _provider?.SendMessage( a, b, c, d );
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action< T1, T2, T3, T4 > > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
}
|
|
|
|
public sealed class EventProvider< T1, T2, T3, T4, T5 > : IDisposable
|
|
{
|
|
private ICallGateProvider< T1, T2, T3, T4, T5, object? >? _provider;
|
|
private Delegate? _unsubscriber;
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label,
|
|
(Action< Action< T1, T2, T3, T4, T5 > > Add, Action< Action< T1, T2, T3, T4, T5 > > Del)? subscribe = null )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, object? >( label );
|
|
subscribe?.Add( Invoke );
|
|
_unsubscriber = subscribe?.Del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public EventProvider( DalamudPluginInterface pi, string label, Action add, Action del )
|
|
{
|
|
_unsubscriber = null;
|
|
try
|
|
{
|
|
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, object? >( label );
|
|
add();
|
|
_unsubscriber = del;
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
|
_provider = null;
|
|
}
|
|
}
|
|
|
|
public void Invoke( T1 a, T2 b, T3 c, T4 d, T5 e )
|
|
=> _provider?.SendMessage( a, b, c, d, e );
|
|
|
|
public void Dispose()
|
|
{
|
|
switch( _unsubscriber )
|
|
{
|
|
case Action< Action< T1, T2, T3, T4, T5 > > a:
|
|
a( Invoke );
|
|
break;
|
|
case Action b:
|
|
b();
|
|
break;
|
|
}
|
|
|
|
_unsubscriber = null;
|
|
_provider = null;
|
|
GC.SuppressFinalize( this );
|
|
}
|
|
|
|
~EventProvider()
|
|
=> Dispose();
|
|
} |