mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-30 20:33:43 +01:00
Use external library for API interface and IPC.
This commit is contained in:
parent
b3f048bfe6
commit
918d5db6a6
69 changed files with 4026 additions and 1873 deletions
66
tmp/Helpers/ActionProvider.cs
Normal file
66
tmp/Helpers/ActionProvider.cs
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
using System;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
|
||||
namespace Penumbra.Api.Helpers;
|
||||
|
||||
public sealed class ActionProvider<T1> : IDisposable
|
||||
{
|
||||
private ICallGateProvider<T1, object?>? _provider;
|
||||
|
||||
public ActionProvider( DalamudPluginInterface pi, string label, Action<T1> action )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider<T1, object?>( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterAction( action );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterAction();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~ActionProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class ActionProvider< T1, T2 > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, T2, object? >? _provider;
|
||||
|
||||
public ActionProvider( DalamudPluginInterface pi, string label, Action< T1, T2 > action )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, T2, object? >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterAction( action );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterAction();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~ActionProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
54
tmp/Helpers/ActionSubscriber.cs
Normal file
54
tmp/Helpers/ActionSubscriber.cs
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
using System;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
|
||||
namespace Penumbra.Api.Helpers;
|
||||
|
||||
public readonly struct ActionSubscriber< T1 >
|
||||
{
|
||||
private readonly ICallGateSubscriber< T1, object? >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public ActionSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, object? >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Invoke( T1 a )
|
||||
=> _subscriber?.InvokeAction( a );
|
||||
}
|
||||
|
||||
public readonly struct ActionSubscriber< T1, T2 >
|
||||
{
|
||||
private readonly ICallGateSubscriber< T1, T2, object? >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public ActionSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, object? >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Invoke( T1 a, T2 b )
|
||||
=> _subscriber?.InvokeAction( a, b );
|
||||
}
|
||||
376
tmp/Helpers/EventProvider.cs
Normal file
376
tmp/Helpers/EventProvider.cs
Normal file
|
|
@ -0,0 +1,376 @@
|
|||
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();
|
||||
}
|
||||
607
tmp/Helpers/EventSubscriber.cs
Normal file
607
tmp/Helpers/EventSubscriber.cs
Normal file
|
|
@ -0,0 +1,607 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
|
||||
namespace Penumbra.Api.Helpers;
|
||||
|
||||
public sealed class EventSubscriber : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action, Action > _delegates = new();
|
||||
private ICallGateSubscriber< object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action()
|
||||
{
|
||||
try
|
||||
{
|
||||
value();
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class EventSubscriber< T1 > : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action< T1 >, Action< T1 > > _delegates = new();
|
||||
private ICallGateSubscriber< T1, object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1 >[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action< T1 > Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action( T1 a )
|
||||
{
|
||||
try
|
||||
{
|
||||
value( a );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class EventSubscriber< T1, T2 > : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action< T1, T2 >, Action< T1, T2 > > _delegates = new();
|
||||
private ICallGateSubscriber< T1, T2, object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2 >[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action< T1, T2 > Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action( T1 a, T2 b )
|
||||
{
|
||||
try
|
||||
{
|
||||
value( a, b );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class EventSubscriber< T1, T2, T3 > : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action< T1, T2, T3 >, Action< T1, T2, T3 > > _delegates = new();
|
||||
private ICallGateSubscriber< T1, T2, T3, object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3 >[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action< T1, T2, T3 > Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action( T1 a, T2 b, T3 c )
|
||||
{
|
||||
try
|
||||
{
|
||||
value( a, b, c );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class EventSubscriber< T1, T2, T3, T4 > : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action< T1, T2, T3, T4 >, Action< T1, T2, T3, T4 > > _delegates = new();
|
||||
private ICallGateSubscriber< T1, T2, T3, T4, object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3, T4 >[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action< T1, T2, T3, T4 > Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action( T1 a, T2 b, T3 c, T4 d )
|
||||
{
|
||||
try
|
||||
{
|
||||
value( a, b, c, d );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{e}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class EventSubscriber< T1, T2, T3, T4, T5 > : IDisposable
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly Dictionary< Action< T1, T2, T3, T4, T5 >, Action< T1, T2, T3, T4, T5 > > _delegates = new();
|
||||
private ICallGateSubscriber< T1, T2, T3, T4, T5, object? >? _subscriber;
|
||||
private bool _disabled;
|
||||
|
||||
public EventSubscriber( DalamudPluginInterface pi, string label, params Action< T1, T2, T3, T4, T5 >[] actions )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, T5, object? >( label );
|
||||
foreach( var action in actions )
|
||||
{
|
||||
Event += action;
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void Enable()
|
||||
{
|
||||
if( _disabled && _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Subscribe( action );
|
||||
}
|
||||
|
||||
_disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable()
|
||||
{
|
||||
if( !_disabled )
|
||||
{
|
||||
if( _subscriber != null )
|
||||
{
|
||||
foreach( var action in _delegates.Keys )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
|
||||
_disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public event Action< T1, T2, T3, T4, T5 > Event
|
||||
{
|
||||
add
|
||||
{
|
||||
if( _subscriber != null && !_delegates.ContainsKey( value ) )
|
||||
{
|
||||
void Action( T1 a, T2 b, T3 c, T4 d, T5 e )
|
||||
{
|
||||
try
|
||||
{
|
||||
value( a, b, c, d, e );
|
||||
}
|
||||
catch( Exception ex )
|
||||
{
|
||||
PluginLog.Error( $"Exception invoking IPC event {_label}:\n{ex}" );
|
||||
}
|
||||
}
|
||||
|
||||
if( _delegates.TryAdd( value, Action ) && !_disabled )
|
||||
{
|
||||
_subscriber.Subscribe( Action );
|
||||
}
|
||||
}
|
||||
}
|
||||
remove
|
||||
{
|
||||
if( _subscriber != null && _delegates.Remove( value, out var action ) )
|
||||
{
|
||||
_subscriber.Unsubscribe( action );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Disable();
|
||||
_subscriber = null;
|
||||
_delegates.Clear();
|
||||
}
|
||||
|
||||
~EventSubscriber()
|
||||
=> Dispose();
|
||||
}
|
||||
186
tmp/Helpers/FuncProvider.cs
Normal file
186
tmp/Helpers/FuncProvider.cs
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
using System;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
|
||||
namespace Penumbra.Api.Helpers;
|
||||
|
||||
public sealed class FuncProvider< TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class FuncProvider< T1, TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class FuncProvider< T1, T2, TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, T2, TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, T2, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class FuncProvider< T1, T2, T3, TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, T2, T3, TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, T2, T3, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class FuncProvider< T1, T2, T3, T4, TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, T2, T3, T4, TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, T4, TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, T2, T3, T4, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
|
||||
public sealed class FuncProvider< T1, T2, T3, T4, T5, TRet > : IDisposable
|
||||
{
|
||||
private ICallGateProvider< T1, T2, T3, T4, T5, TRet >? _provider;
|
||||
|
||||
public FuncProvider( DalamudPluginInterface pi, string label, Func< T1, T2, T3, T4, T5, TRet > func )
|
||||
{
|
||||
try
|
||||
{
|
||||
_provider = pi.GetIpcProvider< T1, T2, T3, T4, T5, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Provider for {label}\n{e}" );
|
||||
_provider = null;
|
||||
}
|
||||
|
||||
_provider?.RegisterFunc( func );
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_provider?.UnregisterFunc();
|
||||
_provider = null;
|
||||
GC.SuppressFinalize( this );
|
||||
}
|
||||
|
||||
~FuncProvider()
|
||||
=> Dispose();
|
||||
}
|
||||
163
tmp/Helpers/FuncSubscriber.cs
Normal file
163
tmp/Helpers/FuncSubscriber.cs
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
using System;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
using Dalamud.Plugin.Ipc;
|
||||
using Dalamud.Plugin.Ipc.Exceptions;
|
||||
|
||||
namespace Penumbra.Api.Helpers;
|
||||
|
||||
public readonly struct FuncSubscriber< TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke()
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc() : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
|
||||
public readonly struct FuncSubscriber< T1, TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< T1, TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke( T1 a )
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc( a ) : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
|
||||
public readonly struct FuncSubscriber< T1, T2, TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< T1, T2, TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke( T1 a, T2 b )
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc( a, b ) : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
|
||||
public readonly struct FuncSubscriber< T1, T2, T3, TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< T1, T2, T3, TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke( T1 a, T2 b, T3 c )
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c ) : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
|
||||
public readonly struct FuncSubscriber< T1, T2, T3, T4, TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< T1, T2, T3, T4, TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke( T1 a, T2 b, T3 c, T4 d )
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c, d ) : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
|
||||
public readonly struct FuncSubscriber< T1, T2, T3, T4, T5, TRet >
|
||||
{
|
||||
private readonly string _label;
|
||||
private readonly ICallGateSubscriber< T1, T2, T3, T4, T5, TRet >? _subscriber;
|
||||
|
||||
public bool Valid
|
||||
=> _subscriber != null;
|
||||
|
||||
public FuncSubscriber( DalamudPluginInterface pi, string label )
|
||||
{
|
||||
_label = label;
|
||||
try
|
||||
{
|
||||
_subscriber = pi.GetIpcSubscriber< T1, T2, T3, T4, T5, TRet >( label );
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
PluginLog.Error( $"Error registering IPC Subscriber for {label}\n{e}" );
|
||||
_subscriber = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TRet Invoke( T1 a, T2 b, T3 c, T4 d, T5 e )
|
||||
=> _subscriber != null ? _subscriber.InvokeFunc( a, b, c, d, e ) : throw new IpcNotReadyError( _label );
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue