private void button1_Click(object sender, EventArgs e)
        {
            string sessionId           = textBoxCookieId.Text.Trim();
            string authorizationString = textBoxAuthorization.Text.Trim();

            ConnectionInfo    currentConnectionInfo = comboBoxServer.SelectedItem as ConnectionInfo;
            SessionCache      sessionCache          = new SessionCache();
            ConnectionSession connectionSession     = sessionCache[currentConnectionInfo];
            DataBus           dataBus = connectionSession.GetDataBus(sessionId, authorizationString);

            DebugAction debugAction = new DebugAction(dataBus);

            debugAction.CommandLine = textBoxDebug.Text.Trim();
            HttpResponseMessage response = debugAction.DoAction();

            Execute excuteObject = debugAction.ResponseData as Execute;

            ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

            debugEntity.AddTrace(excuteObject);
            if (excuteObject.ClientRequestEntity == null)
            {
                try
                {
                    SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                    //semaphoreEmpty.Release();
                    if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    {
                        dataSyncThread.Resume();
                    }
                }
                catch
                {
                }
                return;
            }
            else if (!excuteObject.ClientRequestEntity.Messages.Rearm)
            {
                return;
            }
            else
            {
                //return;
            }

            while (true)
            {
                DebugResponseAction debugResponse = new DebugResponseAction(dataBus);
                response = debugResponse.DoAction();

                excuteObject = debugResponse.ResponseData as Execute;
                ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

                debugEntity.AddTrace(excuteObject);
                if (excuteObject.ClientRequestEntity == null)
                {
                    SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                    //semaphoreEmpty.Release();
                    if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    {
                        dataSyncThread.Resume();
                    }
                    break;
                }
                else if (excuteObject.ClientRequestEntity.Messages.Rearm == false)
                {
                    //semaphoreEmpty.Release();
                    //if (dataSyncThread.ThreadState == ThreadState.Suspended)
                    //{
                    //    dataSyncThread.Resume();
                    //}
                    //break;
                }
                else
                {
                    //Nothing to do.
                }
            }
        }
        private void SendDebugCommand(object debugCommandObj)
        {
            string debugCommand = debugCommandObj.ToString();

            using (DataBus dataBus = GetDataBus())
            {
                DebugAction debugAction = new DebugAction(dataBus);
                debugAction.CommandLine = debugCommand;
                HttpResponseMessage response = debugAction.DoAction();

                Execute excuteObject = debugAction.ResponseData as Execute;
                ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

                if (excuteObject.ClientRequestEntity == null)
                {
                    try
                    {
                        needHoldSMClient = false;

                        //SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                        SyncBackChunckedData(response.CopiedStream, response.ChunkIndexes);
                        if (dataSyncThread.ThreadState == System.Threading.ThreadState.Suspended)
                        {
                            dataSyncThread.Resume();
                        }
                    }
                    catch
                    {
                        //Nothing to do
                    }
                    return;
                }
                else if (!excuteObject.ClientRequestEntity.Messages.Rearm)
                {
                    debugEntity.AddTrace(excuteObject);
                    return;
                }
                else if (excuteObject.ClientRequestEntity.Name != "message")
                {
                    while (true)
                    {
                        DebugResponseAction debugResponse = new DebugResponseAction(dataBus);
                        response = debugResponse.DoAction();

                        excuteObject = debugResponse.ResponseData as Execute;
                        ActionUtil.StoreMessages(excuteObject.ClientRequestEntity);

                        if (excuteObject.ClientRequestEntity == null)
                        {
                            needHoldSMClient = false;
                            //SyncBackData(response.CopiedStream, response.ChunkIndexes[1]);
                            SyncBackChunckedData(response.CopiedStream, response.ChunkIndexes);
                            //semaphoreEmpty.Release();
                            if (dataSyncThread.ThreadState == System.Threading.ThreadState.Suspended)
                            {
                                dataSyncThread.Resume();
                            }
                            break;
                        }
                        else if (excuteObject.ClientRequestEntity.Messages.Rearm == false)
                        {
                            //semaphoreEmpty.Release();
                            //if (dataSyncThread.ThreadState == ThreadState.Suspended)
                            //{
                            //    dataSyncThread.Resume();
                            //}
                            //break;
                        }
                        else
                        {
                            //Nothing to do.
                        }
                        debugEntity.AddTrace(excuteObject);
                    }
                }
                else
                {
                    //Nothing to do.
                }
            }
        }