/// <summary>
        ///   Sends the event to signal devices that the game has ended.
        /// </summary>
        ///
        /// <param name="devices">The devices to which the event should be communicated.</param>
        ///
        public Task SendEndEventAsync(IEnumerable <GameDevice> devices)
        {
            return(Task.WhenAll(devices.Select(device =>
            {
                var task = ParticleDeviceCommunicator.InvokeWebHook(device, "endGame");
                task.ConfigureAwait(false);

                return task;
            })));
        }
 /// <summary>
 ///   Sends the event to signal a devices that it was chosen to as the game winner.
 /// </summary>
 ///
 /// <param name="device">The device to which the event should be communicated.</param>
 ///
 public Task SendWinEventAsync(GameDevice device)
 {
     return(ParticleDeviceCommunicator.InvokeWebHook(device, "winner"));
 }
 /// <summary>
 ///   Sends the event to signal a devices that it was eliminated from the game.
 /// </summary>
 ///
 /// <param name="device">The device to which the event should be communicated.</param>
 ///
 public Task SendEliminatedEventAsync(GameDevice device)
 {
     return(ParticleDeviceCommunicator.InvokeWebHook(device, "eliminated"));
 }
 /// <summary>
 ///   Sends the event to signal a devices that it was chosen to as the active ping.
 /// </summary>
 ///
 /// <param name="device">The device to which the event should be communicated.</param>
 /// <param name="timeoutSeconds">The duration of the timeout for the ping, in seconds.</param>
 ///
 public Task SendPingEventAsync(GameDevice device,
                                int timeoutSeconds)
 {
     return(ParticleDeviceCommunicator.InvokeWebHook(device, "ping", TimeSpan.FromSeconds(timeoutSeconds).TotalMilliseconds.ToString()));
 }