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(); }
/// <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!"); } }
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(); } }