Exemplo n.º 1
0
        /// <summary>
        /// 脚本内容改变
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件参数</param>
        private void luaEdit1_OnChange(object sender, EventArgs e)
        {
            string scriptName = m_filename;

            if (scriptName.IndexOf('\\') != -1)
            {
                scriptName = scriptName.Substring(scriptName.LastIndexOf('\\') + 1);
            }

            if (scriptType == "localFile") // 本地文件跳过加锁机制
            {
                this.Text = scriptName + "*";
                return;
            }

            if (isLocked) // 已经锁了,没人会再改掉服务器端了,忽略检查吧
            {
                return;
            }

            if (IsChanged) // 真的改了
            {
                DataBaseManager databaseManager  = DataBaseManager.GetDataBaseManager();
                string          strServerContent = databaseManager.GetScriptData(this.m_id);

                if (strServerContent == null)
                {
                    MessageBox.Show("校验服务器端文件失败,可能服务器端文件已删除。", "锁定脚本",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.luaEditBox.Text = "";
                    this.luaEditBox.Text = this.ScriptCode;

                    return;
                }

                if (strServerContent != this.ScriptCode)
                {
                    MessageBox.Show("服务器端的文件已被修改过,要重新加载最新内容!", "锁定脚本", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.ScriptCode = strServerContent;
                }

                // 加锁前先解锁 如果是自己加锁后程序崩溃了,再次启动编辑可以解自己以前加的锁。前提是自己不能unlock别人的锁(待考证)
                databaseManager.UnLockScript(this.ID);

                // 正式加锁
                bool bret = databaseManager.LockScript(this.m_id);

                if (bret)
                {
                    // 锁定成功,那么置修改标志于文件名后
                    this.Text     = scriptName + "*";
                    this.isLocked = true;
                }
                else
                {
                    //锁定失败,说明被别人锁了(由于LockScript中包含报错界面,故我就不重复报错了再)
                    this.luaEditBox.Text = this.ScriptCode;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 选择确定
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件参数</param>
        private void bOK_Click(object sender, EventArgs e)
        {
            bool coverScript = coverScriptBox.Checked;

            if (coverScript)
            {
                if (MessageBox.Show("确定要覆盖已有脚本吗?", " 导入脚本",
                                    MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
                    == DialogResult.Cancel)
                {
                    coverScript = false;
                }
            }

            DataBaseManager dataBaseManager = DataBaseManager.GetDataBaseManager();
            int             successCount    = 0;

            scriptList.Clear();

            for (int i = 0; i < scriptListBox.Items.Count; i++)
            {
                if (scriptListBox.GetItemChecked(i))
                {
                    scriptList.Add(scriptListBox.Items[i] as string);
                }
            }

            ProgressForm progressForm = new ProgressForm(0, scriptList.Count);

            progressForm.Show();

            for (int i = 0; i < scriptList.Count; i++)
            {
                string scriptName = scriptList[i];
                string fileName   = Path.Combine(fileFolder, scriptName);
                string content    = Helper.FileToString(fileName);

                progressForm.ShowProgress(i, string.Format("导入脚本{0}的数据...", scriptName));

                if (!string.IsNullOrEmpty(content))
                {
                    string dataBasePath = Path.Combine(scriptFolder, scriptName);
                    string id           = dataBaseManager.CreateScriptData(dataBasePath, content, coverScript);

                    if (id != null)
                    {
                        createNewNode(rootNode, scriptName, id);
                        successCount++;
                    }
                }
            }

            progressForm.Close();

            MessageBox.Show(string.Format("共导入{0}个脚本文件!", successCount), "导入脚本",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);

            DialogResult = DialogResult.OK;
            this.Close();
        }
Exemplo n.º 3
0
        /// <summary>
        /// 编辑文本事件
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件</param>
        private void editText(object sender, EventArgs e)
        {
            ButtonItem buttonItem = sender as ButtonItem;
            TextBox    textBox    = buttonItem.Tag as TextBox;

            System.Data.SqlClient.SqlConnection conn = DataBaseManager.GetDataBaseManager().Connection;
            string result = doit.show(textBox.Text, ref conn, Helper.ClientPath);

            textBox.Text = result;
        }
Exemplo n.º 4
0
        public void Reload()
        {
            if (IsChanged)
            {
                throw (new Exception("文件改变后reload无效"));
            }
            DataBaseManager dbm = DataBaseManager.GetDataBaseManager();
            string          strServerContent = dbm.GetScriptData(this.m_id);

            if (strServerContent != null)
            {
                this.ScriptCode = strServerContent;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 初始化数据
        /// </summary>
        private void InitData()
        {
            dataBaseManager = DataBaseManager.GetDataBaseManager();
            lsTable         = dataBaseManager.GetLSInformation();
            scriptTable     = dataBaseManager.GetScriptInformation();

            if ((lsTable != null) && (scriptTable != null)) // 数据表非空
            {
                // 添加下拉框内容
                List <string> lsClassification = dataBaseManager.GetLSClassification();
                foreach (string s in lsClassification)
                {
                    comboBoxEx1.Items.Add(s);
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 初始化数据
        /// </summary>
        private void Init()
        {
            DataBaseManager databaseManager = DataBaseManager.GetDataBaseManager();

            if (idList != null)
            {
                Hashtable infoTable = databaseManager.OutputScriptData(idList, false);

                if (infoTable != null)
                {
                    foreach (string key in infoTable.Keys)
                    {
                        string       content  = infoTable[key].ToString();
                        FileListItem listItem = new FileListItem(key, clietFolder, content);
                        listFiles.Items.Add(listItem, true);
                    }
                }
            }
        }
Exemplo n.º 7
0
        private void treeViewQureyResult_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Nodes.Count != 0)
            {
                return;
            }
            string label = e.Node.Tag.ToString();
            string data  = labelTable[label] as string;

            if (data == null)
            {
                data = DataBaseManager.GetDataBaseManager().GetScriptHistoryData(label);
                labelTable[label] = data;
            }

            if (data == null)
            {
                data = "";
            }
            tbxData.Text = data;
        }
Exemplo n.º 8
0
        /// <summary>
        /// 编辑面板关闭
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件参数</param>
        private void frmEdit_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (IsChanged)
            {
                if (MessageBox.Show(string.Format(" 内容已改变是否保存?", m_filename), "保存脚本",
                                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    // 保存前查错
                    MainForm mainForm = this.MdiParent as MainForm;
                    string   strOut   = mainForm.ScriptCheck(luaEditBox.Text);

                    if (strOut != null)
                    {
                        strOut = strOut.TrimEnd('\n');
                    }

                    if (!string.IsNullOrEmpty(strOut))
                    {
                        MessageBox.Show(string.Format("{0} 脚本中包含错误:\r\n{1}", m_filename, strOut), "脚本检查",
                                        MessageBoxButtons.OK, MessageBoxIcon.Question);
                        TreePhOpera.SetNodeColorByID(mainForm.treePh, this.ID, Color.Red);
                    }
                    else
                    {
                        TreePhOpera.SetNodeColorByID(mainForm.treePh, this.ID, Color.Black);
                    }

                    // 保存
                    DoSave();
                }
                else
                {
                    // 不保存
                    DataBaseManager databaseManager = DataBaseManager.GetDataBaseManager();
                    databaseManager.UnLockScript(this.ID);

                    this.isLocked = false;
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 用户改变选择
        /// </summary>
        /// <param name="sender">事件发送者</param>
        /// <param name="e">事件</param>
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = listBox1.SelectedIndex;

            if (index < 0 || index >= labelList.Count) // 越界
            {
                return;
            }
            string label = labelList[index];
            string data  = labelTable[label] as string;

            if (data == null)
            {
                data = DataBaseManager.GetDataBaseManager().GetScriptHistoryData(label);
                labelTable[label] = data;
            }

            if (data == null)
            {
                data = "";
            }
            textBoxX1.Text = data;
        }
Exemplo n.º 10
0
        /// <summary>
        /// 保存脚本
        /// </summary>
        /// <returns>是否保存成功</returns>
        public bool DoSave()
        {
            bool saveSuccess = false;

            if (IsChanged) // 需要保存
            {
                string scriptName = m_filename;

                if (scriptName.IndexOf('\\') != -1)
                {
                    scriptName = scriptName.Substring(scriptName.LastIndexOf('\\') + 1);
                }

                switch (scriptType)
                {
                case "databaseFile":     // 数据库脚本文件
                {
                    DataBaseManager databaseManager = DataBaseManager.GetDataBaseManager();
                    string          strView         = "";
                    bool            bret            = databaseManager.SaveScriptData(this.FileName, this.NewScriptCode, out strView);

                    if (bret)
                    {
                        if (strView != this.NewScriptCode)
                        {
                            this.ScriptCode = databaseManager.GetBeforeOpen(strView, FileName);
                        }

                        this.ScriptCode = this.NewScriptCode;


                        this.Text = scriptName;
                        databaseManager.UnLockScript(this.ID);
                        bret          = true;
                        this.isLocked = false;
                    }

                    saveSuccess = bret;

                    break;
                }

                case "localFile":     // 本地脚本文件
                {
                    Helper.WriteStringToFile(NewScriptCode, m_filename);
                    this.ScriptCode = this.NewScriptCode;
                    this.Text       = scriptName;
                    saveSuccess     = true;

                    break;
                }

                default:
                {
                    break;
                }
                }
            }

            return(saveSuccess);
        }
Exemplo n.º 11
0
        private void btnReplace_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("替换结果将不直接写入数据库,而且不能恢复,确认继续操作?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button2) != DialogResult.Yes)
            {
                return;
            }

            SetControlsEnabled(false);
            if (treePreview.Nodes.Count == 0)
            {
                MessageBox.Show("请先搜索出文件,再针对文件进行替换!");
                SetControlsEnabled(true);
                return;
            }

            DataBaseManager dbm = DataBaseManager.GetDataBaseManager();

            //第1步 检查锁
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (dbm.IsScriptLocked(strID))
                {
                    //文件锁了
                    MessageBox.Show("失败:文件[" + tn_file.Text + "]被正在被人编辑,无法启动替换。");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第2步 检查在选择过程中,选中项的服务器端数据变过没有
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file        = tn_file.Tag as Hashtable;
                string    strFileContent = ht_file["strFileContent"].ToString();
                string    strID          = ht_file["id"].ToString();
                if (strFileContent != dbm.GetScriptData(strID))
                {
                    //服务器端变过了
                    MessageBox.Show("失败:查找之后,替换之前,文件内容已变更,所以无法替换,请重新启动替换程序!");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第3步 锁定选择项
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (!dbm.LockScript(strID))
                {
                    MessageBox.Show("失败:检查一致性的过程中有人锁定了脚本,请迅速保存所有文件后重新运行脚本编辑器再次替换。");
                    SetControlsEnabled(true);
                    return;
                }
            }

            //第4步 替换选择项
            string strResult  = "";
            string strFind    = findTextBox.Text;
            string strReplace = replaceTextBox.Text;

            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file    = tn_file.Tag as Hashtable;
                string    strContent = "";
                foreach (TreeNode tnz in tn_file.Nodes)
                {
                    Hashtable ht_nodez = tnz.Tag as Hashtable;
                    strContent += ht_nodez["line_before"].ToString();
                    if (!tnz.Checked)
                    {
                        strContent += strFind;
                    }
                    else
                    {
                        strContent += strReplace;
                    }
                }
                strContent += ht_file["line_last"].ToString();
                string strView = "";
                bool   ret     = dbm.SaveScriptData(tn_file.Text, strContent, out strView);
                strResult += tn_file.Text + (ret ? "...OK\n" : "...NG\n");
            }

            //第5步 解锁选择项
            foreach (TreeNode tn_file in treePreview.Nodes)
            {
                if (!tn_file.Checked)
                {
                    continue;
                }
                Hashtable ht_file = tn_file.Tag as Hashtable;
                string    strID   = ht_file["id"].ToString();
                if (!dbm.UnLockScript(strID))
                {
                    MessageBox.Show(strResult + "成功:替换完成后解锁失败,原因不明,请联系管理员");
                    SetControlsEnabled(true);
                    return;
                }
            }

            MessageBox.Show("替换完成!");//\n" + strResult);
            treePreview.Nodes.Clear();
            wbPriview.DocumentText = "";
            SetControlsEnabled(true);
        }