@@ -6,6 +6,12 @@ namespace Discord.Rpc | |||||
public partial class DiscordRpcClient | public partial class DiscordRpcClient | ||||
{ | { | ||||
//General | //General | ||||
public event Func<Task> Connecting | |||||
{ | |||||
add { _connectingEvent.Add(value); } | |||||
remove { _connectingEvent.Remove(value); } | |||||
} | |||||
private readonly AsyncEvent<Func<Task>> _connectingEvent = new AsyncEvent<Func<Task>>(); | |||||
public event Func<Task> Connected | public event Func<Task> Connected | ||||
{ | { | ||||
add { _connectedEvent.Add(value); } | add { _connectedEvent.Add(value); } | ||||
@@ -40,6 +40,7 @@ namespace Discord.Rpc | |||||
_rpcLogger = LogManager.CreateLogger("RPC"); | _rpcLogger = LogManager.CreateLogger("RPC"); | ||||
_connection = new ConnectionManager(_stateLock, _rpcLogger, config.ConnectionTimeout, | _connection = new ConnectionManager(_stateLock, _rpcLogger, config.ConnectionTimeout, | ||||
ConnectAsync, DisconnectAsync, x => ApiClient.Disconnected += x); | ConnectAsync, DisconnectAsync, x => ApiClient.Disconnected += x); | ||||
_connection.Connecting += () => _connectingEvent.InvokeAsync(); | |||||
_connection.Connected += () => _connectedEvent.InvokeAsync(); | _connection.Connected += () => _connectedEvent.InvokeAsync(); | ||||
_connection.Disconnected += (ex, recon) => _disconnectedEvent.InvokeAsync(ex); | _connection.Disconnected += (ex, recon) => _disconnectedEvent.InvokeAsync(ex); | ||||
@@ -8,6 +8,8 @@ namespace Discord | |||||
{ | { | ||||
internal class ConnectionManager | internal class ConnectionManager | ||||
{ | { | ||||
public event Func<Task> Connecting { add { _connectingEvent.Add(value); } remove { _connectingEvent.Remove(value); } } | |||||
private readonly AsyncEvent<Func<Task>> _connectingEvent = new AsyncEvent<Func<Task>>(); | |||||
public event Func<Task> Connected { add { _connectedEvent.Add(value); } remove { _connectedEvent.Remove(value); } } | public event Func<Task> Connected { add { _connectedEvent.Add(value); } remove { _connectedEvent.Remove(value); } } | ||||
private readonly AsyncEvent<Func<Task>> _connectedEvent = new AsyncEvent<Func<Task>>(); | private readonly AsyncEvent<Func<Task>> _connectedEvent = new AsyncEvent<Func<Task>>(); | ||||
public event Func<Exception, bool, Task> Disconnected { add { _disconnectedEvent.Add(value); } remove { _disconnectedEvent.Remove(value); } } | public event Func<Exception, bool, Task> Disconnected { add { _disconnectedEvent.Add(value); } remove { _disconnectedEvent.Remove(value); } } | ||||
@@ -123,6 +125,8 @@ namespace Discord | |||||
try | try | ||||
{ | { | ||||
await _connectingEvent.InvokeAsync().ConfigureAwait(false); | |||||
var readyPromise = new TaskCompletionSource<bool>(); | var readyPromise = new TaskCompletionSource<bool>(); | ||||
_readyPromise = readyPromise; | _readyPromise = readyPromise; | ||||
@@ -7,6 +7,12 @@ namespace Discord.WebSocket | |||||
public partial class DiscordSocketClient | public partial class DiscordSocketClient | ||||
{ | { | ||||
//General | //General | ||||
public event Func<Task> Connecting | |||||
{ | |||||
add { _connectingEvent.Add(value); } | |||||
remove { _connectingEvent.Remove(value); } | |||||
} | |||||
private readonly AsyncEvent<Func<Task>> _connectingEvent = new AsyncEvent<Func<Task>>(); | |||||
public event Func<Task> Connected | public event Func<Task> Connected | ||||
{ | { | ||||
add { _connectedEvent.Add(value); } | add { _connectedEvent.Add(value); } | ||||
@@ -92,6 +92,7 @@ namespace Discord.WebSocket | |||||
_gatewayLogger = LogManager.CreateLogger(ShardId == 0 && TotalShards == 1 ? "Gateway" : $"Shard #{ShardId}"); | _gatewayLogger = LogManager.CreateLogger(ShardId == 0 && TotalShards == 1 ? "Gateway" : $"Shard #{ShardId}"); | ||||
_connection = new ConnectionManager(_stateLock, _gatewayLogger, config.ConnectionTimeout, | _connection = new ConnectionManager(_stateLock, _gatewayLogger, config.ConnectionTimeout, | ||||
ConnectAsync, DisconnectAsync, x => ApiClient.Disconnected += x); | ConnectAsync, DisconnectAsync, x => ApiClient.Disconnected += x); | ||||
_connection.Connecting += () => TimedInvokeAsync(_connectingEvent, nameof(Connecting)); | |||||
_connection.Connected += () => TimedInvokeAsync(_connectedEvent, nameof(Connected)); | _connection.Connected += () => TimedInvokeAsync(_connectedEvent, nameof(Connected)); | ||||
_connection.Disconnected += (ex, recon) => TimedInvokeAsync(_disconnectedEvent, nameof(Disconnected), ex); | _connection.Disconnected += (ex, recon) => TimedInvokeAsync(_disconnectedEvent, nameof(Disconnected), ex); | ||||