Esempio n. 1
0
        public async Task Listen()
        {
            while (!_cancellationToken.IsCancellationRequested)
            {
                var message = await ReceiveAsync();

                OnJsonMessage?.Invoke(message);
                if (TryDeserialize <WebSocketResponse>(message, out var response))
                {
                    var channelDisplayName = response.GetDataOrDefault("channel_display_name");
                    OnWebSocketResponse?.Invoke(response);
                    if (response.TryGetData("posted", "post", out var postJson))
                    {
                        if (TryDeserialize <Posted>(postJson, out var posted))
                        {
                            OnPosted?.Invoke(new PostedEvent {
                                ChannelDisplayName = channelDisplayName,
                                Post = posted
                            });
                        }
                    }
                    if (response.TryGetData("hello", "server_version", out var serverVersion))
                    {
                        OnHello?.Invoke(serverVersion);
                        if (response.Broadcast != null && response.Broadcast.ContainsKey("user_id"))
                        {
                            OnBotUserId?.Invoke(response.Broadcast["user_id"]);
                        }
                    }
                }
            }
        }
        async Task HandleHelloPayload(DiscordApiData payload, DiscordApiData data)
        {
            if (!receivedHello)
            {
                receivedHello = true;

                // Set heartbeat interval
                heartbeatInterval = data.GetInteger("heartbeat_interval").Value;
                log.LogVerbose($"[Hello] heartbeat_interval = {heartbeatInterval}ms");

                // Begin heartbeat loop
                heartbeatCancellationSource = new CancellationTokenSource();
                heartbeatTask = HeartbeatLoop();

                // Notify so the IDENTIFY or RESUME payloads are sent
                await OnHello?.Invoke();
            }
            else
            {
                log.LogWarning("Received more than one HELLO payload.");
            }
        }
Esempio n. 3
0
 // Факт прихода сотрудника.
 public void Come(DateTime comeTime)
 {
     OnHello?.Invoke(this, new ComeTimeEventArgs(comeTime));
 }