private void SendDataExec(SendDataConfig config)
        {
            var target = "*";

            /* 送信先補正 */
            switch (config.SendTargetType)
            {
            case SendDataTargetType.System:
                target = FormUiManager.SendTarget;
                break;

            case SendDataTargetType.Common:
                target = TBox_CommonTarget.Text;
                break;

            case SendDataTargetType.Custom:
                target = config.SendTargetCustom;
                break;
            }

            if (ConfigManager.User.SendDataListMode.Value == SendDataListMode.Simple)
            {
                target = FormUiManager.SendTarget;
            }

            /* 送信実行 */
            Program.API.API_SendData(target, config.SendData);
        }
        private void SetGridDataFromConfig(DataGridViewCell cell, SendDataConfig config)
        {
            switch ((ColumnId)cell.OwningColumn.Tag)
            {
            case ColumnId.SendButton:
                cell.Value = "Send";
                break;

            case ColumnId.SendData:
                cell.Value = config.SendData;
                break;

            case ColumnId.PlayListInclude:
                cell.Value = config.PlayListInclude;
                break;

            case ColumnId.SendTargetType:
                cell.Value = config.SendTargetType;
                break;

            case ColumnId.SendTargetCustom:
                cell.Value = config.SendTargetCustom;
                break;

            case ColumnId.DelayFixed:
                cell.Value = config.DelayFixed.ToString();
                break;

            case ColumnId.DelayRandom:
                cell.Value = config.DelayRandom.ToString();
                break;
            }
        }
        private SendDataConfig LoadNextPlaySendData(ref int index)
        {
            for (; index < GView_SendDataList.RowCount; index++)
            {
                var config = GetSendDataConfig(index);

                if ((config == null) ||
                    (!config.PlayListInclude)
                    )
                {
                    continue;
                }

                var config_play = new SendDataConfig(config);

                if (ConfigManager.User.SendDataListMode.Value == SendDataListMode.Simple)
                {
                    config_play.DelayFixed  = (uint)Num_SendInterval_Fixed.Value;
                    config_play.DelayRandom = (uint)Num_SendInterval_Random.Value;
                }

                return(config_play);
            }

            return(null);
        }
        private void OnListPlayTimer(object sender, EventArgs e)
        {
            var timer = sender as Timer;

            /* 初期化処理 */
            if (play_data_index_busy_ < 0)
            {
                play_data_index_busy_ = 0;
            }
            else
            {
                play_data_index_busy_++;
            }

            /* コマンド情報取得 */
            play_data_ = LoadNextPlaySendData(ref play_data_index_busy_);

            if (play_data_ != null)
            {
                /* --- コマンド情報取得成功 --- */
                /* 次のコマンドまでの遅延時間 */
                play_next_delay_ = play_data_.DelayFixed + (uint)((new Random()).Next((int)play_data_.DelayRandom));

                /* タイマー再起動 */
                ListPlayTimerSetup(play_next_delay_);

                /* コマンド実行 */
                SendDataExec(play_data_);
            }
            else
            {
                /* --- コマンド終端に到着 --- */
                /* 実行中コマンド番号を初期化 */
                play_data_index_busy_ = -1;

                if (play_repeat_count_ < uint.MaxValue)
                {
                    play_repeat_count_++;
                }

                if ((Num_RepeatCount.Value > 0) &&
                    (play_repeat_count_ >= Num_RepeatCount.Value)
                    )
                {
                    /* --- 繰り返し回数上限に達した --- */
                    ListPlayReset();
                }
                else
                {
                    /* --- 繰り返し実行 --- */
                    /* 再チェック */
                    ListPlayTimerRecall();
                }
            }

            UpdateStatusUI();
        }
        private void SetGridDataFromConfig(DataGridViewRow row_obj, SendDataConfig config)
        {
            if (config == null)
            {
                return;
            }

            foreach (DataGridViewCell cell in row_obj.Cells)
            {
                SetGridDataFromConfig(cell, config);
            }
        }
        private SendDataConfig[] ImportCsvData(StreamReader reader, ColumnId[] columns)
        {
            var configs = new Queue <SendDataConfig>();

            while (!reader.EndOfStream)
            {
                var config = new SendDataConfig();
                var items  = TextUtil.ReadCsvLine(reader);

                foreach (var item in items.Select((v, i) => new { v, i }))
                {
                    switch (columns[item.i])
                    {
                    case ColumnId.PlayListInclude:
                        config.PlayListInclude = bool.Parse(item.v);
                        break;

                    case ColumnId.SendTargetType:
                        config.SendTargetType = (SendDataTargetType)Enum.Parse(typeof(SendDataTargetType), item.v);
                        break;

                    case ColumnId.SendTargetCustom:
                        config.SendTargetCustom = item.v;
                        break;

                    case ColumnId.SendData:
                        config.SendData = item.v;
                        break;

                    case ColumnId.DelayFixed:
                        config.DelayFixed = uint.Parse(item.v);
                        break;

                    case ColumnId.DelayRandom:
                        config.DelayRandom = uint.Parse(item.v);
                        break;
                    }
                }

                configs.Enqueue(config);
            }

            return(configs.ToArray());
        }
        private void SetConfigFromGridData(DataGridViewCell cell, SendDataConfig config)
        {
            switch ((ColumnId)cell.OwningColumn.Tag)
            {
            case ColumnId.SendData:
                config.SendData = cell.Value as string;
                break;

            case ColumnId.PlayListInclude:
                config.PlayListInclude = (bool)cell.Value;
                break;

            case ColumnId.SendTargetType:
                config.SendTargetType = (SendDataTargetType)cell.Value;
                break;

            case ColumnId.SendTargetCustom:
                config.SendTargetCustom = cell.Value as string;
                break;

            case ColumnId.DelayFixed:
            {
                var value = (uint)0;

                if (uint.TryParse(cell.Value as string, out value))
                {
                    config.DelayFixed = value;
                }
            }
            break;

            case ColumnId.DelayRandom:
            {
                var value = (uint)0;

                if (uint.TryParse(cell.Value as string, out value))
                {
                    config.DelayRandom = value;
                }
            }
            break;
            }
        }
        private void AddGridDataFromConfig(SendDataConfig config)
        {
            /* 新規行を追加 */
            var row_index = GView_SendDataList.Rows.Add();

            if (row_index < 0)
            {
                return;
            }

            var row_obj = GView_SendDataList.Rows[row_index];

            row_obj.Tag = new SendDataConfig(config);

            /* 値を書き換え */
            SetGridDataFromConfig(row_obj);

            /* エラー表示を更新 */
            UpdateEditStatus(row_obj);
        }
        private void AddSendDataConfig(SendDataConfig config)
        {
            /* 新規行を追加 */
            var row_index = GView_CmdList.Rows.Add();

            if (row_index < 0)
            {
                return;
            }

            var row_obj = GView_CmdList.Rows[row_index];

            /* 値を書き換え */
            row_obj.Cells[(int)ColumnId.Enable].Value       = config.PlayListInclude;
            row_obj.Cells[(int)ColumnId.TargetType].Value   = config.SendTargetType;
            row_obj.Cells[(int)ColumnId.CustomTarget].Value = config.SendTargetCustom;
            row_obj.Cells[(int)ColumnId.Command].Value      = config.SendData;
            row_obj.Cells[(int)ColumnId.DelayFixed].Value   = config.DelayFixed.ToString();
            row_obj.Cells[(int)ColumnId.DelayRandom].Value  = config.DelayRandom.ToString();
        }