/// <exception cref="DiscordWebSocketException">Thrown if the payload fails to send because of a WebSocket error.</exception> /// <exception cref="InvalidOperationException">Thrown if the socket is not connected.</exception> /// <exception cref="JsonWriterException">Thrown if the given data cannot be serialized as JSON.</exception> async Task SendPayload(GatewayOPCode op, DiscordApiData data) { DiscordApiData payload = new DiscordApiData(DiscordApiDataType.Container); payload.Set("op", (int)op); payload.Set("d", data); // Check with the payload rate limiter await outboundPayloadRateLimiter.Invoke().ConfigureAwait(false); // Send payload await SendAsync(payload).ConfigureAwait(false); }
protected override async Task OnPayloadReceived(DiscordApiData payload) { GatewayOPCode op = (GatewayOPCode)payload.GetInteger("op"); DiscordApiData data = payload.Get("d"); PayloadCallback callback; if (payloadHandlers.TryGetValue(op, out callback)) { if (callback.Synchronous != null) { callback.Synchronous(payload, data); } else { await callback.Asynchronous(payload, data).ConfigureAwait(false); } } else { log.LogWarning($"Missing handler for payload: {op} ({(int)op})"); } }
public PayloadAttribute(GatewayOPCode opCode) { OPCode = opCode; }