/// <summary>
        /// Creates and returns a <see cref="PluginConfigurationData" /> instance containing the
        /// configuration data from this control.
        /// </summary>
        /// <returns>The configuration data.</returns>
        public PluginConfigurationData GetConfiguration()
        {
            SyncPointActivityData activityData = new SyncPointActivityData
            {
                EventName = eventName_TextBox.Text,
                Action    = signalEvent_RadioButton.Checked ? SyncPointAction.Signal : SyncPointAction.Wait
            };

            return(new PluginConfigurationData(activityData, "1.0"));
        }
        /// <summary>
        /// Initializes this configuration control with the specified <see cref="PluginConfigurationData" />.
        /// </summary>
        /// <param name="configuration">The configuration data.</param>
        /// <param name="environment">Information about the plugin environment.</param>
        public void Initialize(PluginConfigurationData configuration, PluginEnvironment environment)
        {
            SyncPointActivityData data = configuration.GetMetadata <SyncPointActivityData>();

            eventName_TextBox.Text = data.EventName;
            if (data.Action == SyncPointAction.Signal)
            {
                signalEvent_RadioButton.Checked = true;
            }
            else
            {
                waitForEvent_RadioButton.Checked = true;
            }
        }
        public PluginExecutionResult Execute(PluginExecutionData executionData)
        {
            SyncPointActivityData activityData = executionData.GetMetadata <SyncPointActivityData>();
            string eventName = activityData.EventName;

            switch (activityData.Action)
            {
            case SyncPointAction.Signal:
                SystemTrace.LogDebug($"Signaling synchronization event: {eventName}");
                SessionRuntime.AsInternal().SignalSynchronizationEvent(eventName);
                break;

            case SyncPointAction.Wait:
                SystemTrace.LogDebug($"Waiting for synchronization event: {eventName}");
                SessionRuntime.AsInternal().WaitForSynchronizationEvent(eventName);
                break;

            default:
                return(new PluginExecutionResult(PluginResult.Error, $"Unknown action '{activityData.Action}'."));
            }

            return(new PluginExecutionResult(PluginResult.Passed));
        }