@@ -179,7 +179,7 @@ namespace Discord.API | |||||
{ | { | ||||
return await SendAsync<GetGatewayResponse>("GET", "gateway", options: options).ConfigureAwait(false); | return await SendAsync<GetGatewayResponse>("GET", "gateway", options: options).ConfigureAwait(false); | ||||
} | } | ||||
public async Task SendIdentifyAsync(int largeThreshold = 100, bool useCompression = true, RequestOptions options = null) | |||||
public async Task SendIdentifyAsync(int largeThreshold = 100, bool useCompression = true, int shardID = 0, int totalShards = 1, RequestOptions options = null) | |||||
{ | { | ||||
var props = new Dictionary<string, string> | var props = new Dictionary<string, string> | ||||
{ | { | ||||
@@ -190,8 +190,11 @@ namespace Discord.API | |||||
Token = _authToken, | Token = _authToken, | ||||
Properties = props, | Properties = props, | ||||
LargeThreshold = largeThreshold, | LargeThreshold = largeThreshold, | ||||
UseCompression = useCompression | |||||
UseCompression = useCompression, | |||||
}; | }; | ||||
if (totalShards > 1) | |||||
msg.ShardingParams = new int[] { shardID, totalShards }; | |||||
await SendGatewayAsync(GatewayOpCode.Identify, msg, options: options).ConfigureAwait(false); | await SendGatewayAsync(GatewayOpCode.Identify, msg, options: options).ConfigureAwait(false); | ||||
} | } | ||||
public async Task SendResumeAsync(string sessionId, int lastSeq, RequestOptions options = null) | public async Task SendResumeAsync(string sessionId, int lastSeq, RequestOptions options = null) | ||||
@@ -14,5 +14,7 @@ namespace Discord.API.Gateway | |||||
public int LargeThreshold { get; set; } | public int LargeThreshold { get; set; } | ||||
[JsonProperty("compress")] | [JsonProperty("compress")] | ||||
public bool UseCompression { get; set; } | public bool UseCompression { get; set; } | ||||
[JsonProperty("shard")] | |||||
public Optional<int[]> ShardingParams { get; set; } | |||||
} | } | ||||
} | } |
@@ -5,7 +5,7 @@ namespace Discord | |||||
public class DiscordConfig | public class DiscordConfig | ||||
{ | { | ||||
public const int APIVersion = 6; | public const int APIVersion = 6; | ||||
public static string Version { get; } = typeof(DiscordRestConfig).GetTypeInfo().Assembly?.GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion ?? "Unknown"; | |||||
public static string Version { get; } = typeof(DiscordRestConfig).GetTypeInfo().Assembly?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion ?? "Unknown"; | |||||
public static readonly string ClientAPIUrl = $"https://discordapp.com/api/v{APIVersion}/"; | public static readonly string ClientAPIUrl = $"https://discordapp.com/api/v{APIVersion}/"; | ||||
public const string CDNUrl = "https://cdn.discordapp.com/"; | public const string CDNUrl = "https://cdn.discordapp.com/"; | ||||
@@ -166,7 +166,7 @@ namespace Discord | |||||
if (_sessionId != null) | if (_sessionId != null) | ||||
await ApiClient.SendResumeAsync(_sessionId, _lastSeq).ConfigureAwait(false); | await ApiClient.SendResumeAsync(_sessionId, _lastSeq).ConfigureAwait(false); | ||||
else | else | ||||
await ApiClient.SendIdentifyAsync().ConfigureAwait(false); | |||||
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards:TotalShards).ConfigureAwait(false); | |||||
await _connectTask.Task.ConfigureAwait(false); | await _connectTask.Task.ConfigureAwait(false); | ||||
_canReconnect = true; | _canReconnect = true; | ||||
@@ -534,7 +534,7 @@ namespace Discord | |||||
_sessionId = null; | _sessionId = null; | ||||
_lastSeq = 0; | _lastSeq = 0; | ||||
await ApiClient.SendIdentifyAsync().ConfigureAwait(false); | |||||
await ApiClient.SendIdentifyAsync(shardID: ShardId, totalShards: TotalShards).ConfigureAwait(false); | |||||
} | } | ||||
break; | break; | ||||
case GatewayOpCode.Reconnect: | case GatewayOpCode.Reconnect: | ||||