/// <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);
        }
Пример #2
0
        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})");
            }
        }
Пример #3
0
 public PayloadAttribute(GatewayOPCode opCode)
 {
     OPCode = opCode;
 }