/// <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; } } }
/// <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(); }
/// <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; }
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; } }
/// <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); } } }
/// <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); } } } }
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; }
/// <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; } } }
/// <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; }
/// <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); }
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); }