Browse Source

refactor default state provider

v4/state-cache-providers
Quin Lynch 3 years ago
parent
commit
adcb58e473
1 changed files with 10 additions and 14 deletions
  1. +10
    -14
      src/Discord.Net.WebSocket/State/DefaultStateProvider.cs

+ 10
- 14
src/Discord.Net.WebSocket/State/DefaultStateProvider.cs View File

@@ -45,14 +45,6 @@ namespace Discord.WebSocket
}); });
} }


private TResult WaitSynchronouslyForTask<TResult>(Task<TResult> t)
{
var sw = new SpinWait();
while (!t.IsCompleted)
sw.SpinOnce();
return t.GetAwaiter().GetResult();
}

private TType ValidateAsSocketEntity<TType>(ISnowflakeEntity entity) where TType : SocketEntity<ulong> private TType ValidateAsSocketEntity<TType>(ISnowflakeEntity entity) where TType : SocketEntity<ulong>
{ {
if(entity is not TType val) if(entity is not TType val)
@@ -63,7 +55,6 @@ namespace Discord.WebSocket
private StateBehavior ResolveBehavior(StateBehavior behavior) private StateBehavior ResolveBehavior(StateBehavior behavior)
=> behavior == StateBehavior.Default ? _defaultBehavior : behavior; => behavior == StateBehavior.Default ? _defaultBehavior : behavior;



public ValueTask AddOrUpdateMemberAsync(ulong guildId, IGuildUser user) public ValueTask AddOrUpdateMemberAsync(ulong guildId, IGuildUser user)
{ {
var socketGuildUser = ValidateAsSocketEntity<SocketGuildUser>(user); var socketGuildUser = ValidateAsSocketEntity<SocketGuildUser>(user);
@@ -96,7 +87,7 @@ namespace Discord.WebSocket
} }
else else
{ {
return new ValueTask<IGuildUser>(Task.Run(async () =>
return new ValueTask<IGuildUser>(Task.Run(async () => // review: task.run here?
{ {
var result = await memberLookupTask; var result = await memberLookupTask;


@@ -144,6 +135,9 @@ namespace Discord.WebSocket
} }
} }


if (behavior == StateBehavior.AllowDownload || behavior == StateBehavior.DownloadOnly)
return new ValueTask<IEnumerable<IGuildUser>>(_client.Rest.GetGuildUsersAsync(guildId, options).ContinueWith(x => x.Result.Cast<IGuildUser>()));

return default; return default;
} }


@@ -227,16 +221,18 @@ namespace Discord.WebSocket
return new ValueTask<IPresence>(SocketPresence.Create(fetchTask.Result)); return new ValueTask<IPresence>(SocketPresence.Create(fetchTask.Result));
else else
{ {
return new ValueTask<IPresence>(fetchTask.AsTask().ContinueWith(x =>
return new ValueTask<IPresence>(Task.Run(async () =>
{ {
if (x.Result != null)
return (IPresence)SocketPresence.Create(x.Result);
var result = await fetchTask;

if(result != null)
return (IPresence)SocketPresence.Create(result);
return null; return null;
})); }));
} }
} }


// theres no rest call to download presence so return null
// no download path
return new ValueTask<IPresence>((IPresence)null); return new ValueTask<IPresence>((IPresence)null);
} }




Loading…
Cancel
Save