Exemple #1
0
        public static async void StartGateway()
        {
            if (Gateway == null)
            {
                await RESTCalls.SetupToken();
            }
            //Ready
            Gateway.Ready += Gateway_Ready;
            //Message
            Gateway.MessageCreated += Gateway_MessageCreated;
            Gateway.MessageDeleted += Gateway_MessageDeleted;
            Gateway.MessageUpdated += Gateway_MessageUpdated;
            Gateway.MessageAck     += Gateway_MessageAck;
            //MessageReaction
            Gateway.MessageReactionAdded      += Gateway_MessageReactionAdded;
            Gateway.MessageReactionRemoved    += Gateway_MessageReactionRemoved;
            Gateway.MessageReactionRemovedAll += Gateway_MessageReactionRemovedAll;
            //DMs
            Gateway.DirectMessageChannelCreated += Gateway_DirectMessageChannelCreated;
            Gateway.DirectMessageChannelDeleted += Gateway_DirectMessageChannelDeleted;
            //GuildChannel
            Gateway.GuildChannelCreated += Gateway_GuildChannelCreated;
            Gateway.GuildChannelDeleted += Gateway_GuildChannelDeleted;
            Gateway.GuildChannelUpdated += Gateway_GuildChannelUpdated;
            //ChannelRecipientAdded is handled exclusively by MainPage
            //ChannelRecipientRemoved is handled exclusively by MainPage

            //Guild
            Gateway.GuildCreated += Gateway_GuildCreated;
            Gateway.GuildDeleted += Gateway_GuildDeleted;
            Gateway.GuildUpdated += Gateway_GuildUpdated;
            Gateway.GuildSynced  += Gateway_GuildSynced;
            //GuildMember
            Gateway.GuildMemberAdded   += Gateway_GuildMemberAdded;
            Gateway.GuildMemberChunk   += Gateway_GuildMemberChunk;
            Gateway.GuildMemberRemoved += Gateway_GuildMemberRemoved;
            Gateway.GuildMemberUpdated += Gateway_GuildMemberUpdated;
            //GuildBan
            Gateway.GuildBanAdded   += Gateway_GuildBanAdded;
            Gateway.GuildBanRemoved += Gateway_GuildBanRemoved;
            //Presence
            Gateway.PresenceUpdated += Gateway_PresenceUpdated;
            //RelationShip
            Gateway.RelationShipAdded   += Gateway_RelationShipAdded;
            Gateway.RelationShipRemoved += Gateway_RelationShipRemoved;
            Gateway.RelationShipUpdated += Gateway_RelationShipUpdated;
            //Typing
            Gateway.TypingStarted += Gateway_TypingStarted;
            //Note
            Gateway.UserNoteUpdated += Gateway_UserNoteUpdated;
            //UserSettings
            Gateway.UserSettingsUpdated += Gateway_UserSettingsUpdated;
            //Voice
            Gateway.VoiceServerUpdated += Gateway_VoiceServerUpdated;
            Gateway.VoiceStateUpdated  += Gateway_VoiceStateUpdated;
            //Other
            Gateway.SessionReplaced += Gateway_SessionReplaced;
            await Gateway.ConnectAsync();
        }
Exemple #2
0
        /// <summary>
        /// Starts this shard.
        /// The returned task only finishes once the gateway successfully connects (or is canceled),
        /// and will continue to retry until then.
        /// </summary>
        /// <param name="config">A set of options to use when starting the shard.</param>
        /// <exception cref="ArgumentNullException">Thrown if config is null.</exception>
        /// <exception cref="InvalidOperationException">Thrown if this shard has already been started.</exception>
        /// <exception cref="ObjectDisposedException">Thrown if this shard has been disposed.</exception>
        /// <exception cref="OperationCanceledException"></exception>
        /// <exception cref="ShardStartException">Thrown if the shard fails to start.</exception>
        public async Task StartAsync(ShardStartConfig config, CancellationToken?cancellationToken = null)
        {
            if (isDisposed)
            {
                throw new ObjectDisposedException(nameof(gateway), "Shard has been disposed.");
            }
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            if (!isRunning)
            {
                isRunning = true;

                CleanUp();

                CancellationToken ct = cancellationToken ?? CancellationToken.None;

                try
                {
                    await gateway.ConnectAsync(config, ct).ConfigureAwait(false);
                }
                catch (GatewayHandshakeException ex)
                {
                    isRunning = false;
                    CleanUp();

                    stoppedResetEvent.Set();

                    GatewayFailureData failureData = ex.FailureData;
                    throw new ShardStartException(failureData.Message, this, failureData.Reason, failureData.Exception);
                }
                catch
                {
                    isRunning = false;
                    CleanUp();

                    stoppedResetEvent.Set();

                    throw;
                }

                log.LogInfo("Successfully connected to the Gateway.");

                stoppedResetEvent.Reset();

                OnConnected?.Invoke(this, new ShardEventArgs(this));
            }
            else
            {
                throw new InvalidOperationException($"Shard {Id} has already been started!");
            }
        }
Exemple #3
0
        static async Task Main(string[] args)
        {
            using (var coapClient = new CoapFactory().CreateClient())
            {
                var gateway = new Gateway(coapClient, new GatewaySettings {
                    GatewayIp = IPAddress.Parse("192.168.0.51"), Secret = "MR2PcuQSzcaDvVrp"
                });

                var credentials = await gateway.AuthenticateAsync();

                await gateway.ConnectAsync(credentials);

                await foreach (var device in gateway.GetDevices())
                {
                    Console.WriteLine(device.Name);
                    device.SetClient(coapClient);
                    await device.Observe();
                }

                Console.ReadLine();
            }
        }