Penumbra/tmp/Helpers/FuncSubscriber.cs
2022-10-08 02:02:44 +02:00

163 lines
No EOL
4.7 KiB
C#

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 );
}