Exemple #1
0
        public override void SaveNew(TaskInstance ti)
        {
            var ph = GetProcessRecord(ti.ProcessInstanceId, true);

            if (ph == null)
            {
                //new instance
                ph = new ProcessHolder
                {
                    ProcessInstance = ti.ProcessInstanceId,
                    State           = RecordState.New,
                    IsForUpdate     = true,
                    DbVersion       = null,
                    TaskInstances   = new List <TaskInstance>()
                };
                ph.TaskInstances.Add(ti);
                _cache[ph.ProcessInstance] = ph;
            }
            else
            {
                var i2 = ph.TaskInstances.FindIndex(x => x.InstanceId == ti.InstanceId);
                if (i2 >= 0)
                {
                    throw new Exception("Task already exists: " + ti.InstanceId);
                }
                ph.TaskInstances.Add(ti);
                if (ph.State == RecordState.Unmodified)
                {
                    ph.State = RecordState.Modified;
                }
            }
        }
Exemple #2
0
        public void StandardInput()
        {
            var handle = ProcessHolder.SpawnWithRedirect("sort.exe", "", true, true, true);

            Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle);

            ProcessHolder.SetCreateNoWindow(handle, true);
            ProcessHolder.Start(handle);

            //ソート対象の文字列
            ProcessHolder.WriteLineStandardInput(handle, "xyz");
            ProcessHolder.WriteLineStandardInput(handle, "abc");
            ProcessHolder.WriteLineStandardInput(handle, "3");

            //Ctl-c 相当
            ProcessHolder.CloseStandardInput(handle);

            ProcessHolder.WaitForExit(handle);

            {
                var textOutput = ProcessHolder.ReadStandardOutputAsString(handle);
                Assert.AreEqual("3\nabc\nxyz", textOutput);
            }
            {
                var textError = ProcessHolder.ReadStandardErrorAsString(handle);
                Assert.AreEqual("", textError);
            }

            ProcessHolder.Destroy(handle);
        }
Exemple #3
0
        public void SpawnWithRedirect()
        {
            var has_output = false;

            {
                var handle = ProcessHolder.SpawnWithRedirect("cmd.exe", "/c dir c:\\", true, true);
                Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle);

                ProcessHolder.SetCreateNoWindow(handle, true);
                ProcessHolder.Start(handle);
                var exit = false;
                while (exit == false)
                {
                    exit = ProcessHolder.HasExited(handle);

                    //
                    //標準出力と標準エラーを取得します。
                    //
                    if (ProcessHolder.ReadStandardOutputAsString(handle) != "")
                    {
                        has_output = true;
                    }
                    if (ProcessHolder.ReadStandardErrorAsString(handle) != "")
                    {
                        has_output = true;
                    }
                }

                //
                //残りの標準出力とエラーを取得します。
                //
                var text = ProcessHolder.ReadStandardOutputAsString(handle);
                while (text != "")
                {
                    text       = ProcessHolder.ReadStandardOutputAsString(handle);
                    has_output = true;
                }
                text = ProcessHolder.ReadStandardErrorAsString(handle);
                while (text != "")
                {
                    text       = ProcessHolder.ReadStandardErrorAsString(handle);
                    has_output = true;
                }
                //
                //終了処理
                //
                ProcessHolder.Destroy(handle);
            }

            //出力があるはず
            Assert.AreEqual(true, has_output);
        }
Exemple #4
0
        public void ProcessKill()
        {
            var handle = ProcessHolder.SpawnWithRedirect("notepad.exe", "", false, false);

            Assert.AreNotEqual(ProcessHolder.INVALID_HANDLE, handle);

            ProcessHolder.Start(handle);

            //少し待ってからプロセスをキルする
            System.Threading.Thread.Sleep(1000);

            ProcessHolder.Kill(handle);
            ProcessHolder.Destroy(handle);
        }
Exemple #5
0
        protected ProcessHolder LoadProcessRecord(string instanceId, bool forUpdate)
        {
            var ph = new ProcessHolder {
                State = RecordState.Unmodified, IsForUpdate = forUpdate
            };

            using (var cmd = _ses.Connection.CreateCommand())
            {
                cmd.CommandText = string.Format("select instance_id, definition_id, version, task_instance_data from ProcessInstance {1} where instance_id='{0}'", instanceId, forUpdate ? "with(updlock,rowlock)" : "with(rowlock)");
                using (var dr = cmd.ExecuteReader())
                {
                    if (!dr.Read())
                    {
                        return(null);
                    }
                    ph.SerializedData  = Convert.ToString(dr["task_instance_data"]);
                    ph.ProcessInstance = Convert.ToString(dr["instance_id"]);
                    ph.DbVersion       = Convert.ToString(dr["version"]);
                }
            }
            ph.TaskInstances = DeserializeTaskList(ph.SerializedData);
            return(ph);
        }
 protected ProcessHolder LoadProcessRecord(string instanceId, bool forUpdate)
 {
     var ph = new ProcessHolder { State = RecordState.Unmodified, IsForUpdate = forUpdate };
     using (var cmd = _ses.Connection.CreateCommand())
     {
         cmd.CommandText = string.Format("select instance_id, definition_id, version, task_instance_data from ProcessInstance {1} where instance_id='{0}'", instanceId, forUpdate ? "with(updlock,rowlock)" : "with(rowlock)");
         using (var dr = cmd.ExecuteReader())
         {
             if (!dr.Read()) return null;
             ph.SerializedData = Convert.ToString(dr["task_instance_data"]);
             ph.ProcessInstance = Convert.ToString(dr["instance_id"]);
             ph.DbVersion = Convert.ToString(dr["version"]);
         }
     }
     ph.TaskInstances = DeserializeTaskList(ph.SerializedData);
     return ph;
 }
 public override void SaveNew(TaskInstance ti)
 {
     var ph = GetProcessRecord(ti.ProcessInstanceId, true);
     if (ph == null)
     {
         //new instance
         ph = new ProcessHolder
         {
             ProcessInstance = ti.ProcessInstanceId,
             State = RecordState.New,
             IsForUpdate = true,
             DbVersion = null,
             TaskInstances = new List<TaskInstance>()
         };
         ph.TaskInstances.Add(ti);
         _cache[ph.ProcessInstance] = ph;
     }
     else
     {
         var i2 = ph.TaskInstances.FindIndex(x => x.InstanceId == ti.InstanceId);
         if (i2 >= 0) throw new Exception("Task already exists: " + ti.InstanceId);
         ph.TaskInstances.Add(ti);
         if (ph.State == RecordState.Unmodified) ph.State = RecordState.Modified;
     }
 }