//------------------------------------------------------------------------------------- private void buttonOk_Click(object sender, EventArgs e) { try { OID sid = ((ComboBoxItem<OID>)comboBoxUsers.SelectedItem).Key; dynamic u = null; PulsarQuery q = new PulsarQuery("Security", "CheckPass", new { CheckPass = new object[] { sid, Pulsar.Security.Hash.GetCRC32(textBoxPassword.Text) } }); object res = PulsarConnection.Default.Exec(q); if(res == null || res is Boolean == false || (bool)res == false) { MessageBox.Show("Пароль указан не верно!", "Ошибка аутентификации", MessageBoxButtons.OK, MessageBoxIcon.Error); PulsarQuery.ContextQuery.User = null; return; } u = PulsarConnection.Default.Get(new PulsarQuery("Persons", "Item", new { Item = sid }, PulsarQueryParams.NoStubEssences)); if(u == null) throw new Exception("Сервер не вернул объект пользователя!"); PulsarQuery.ContextQuery.User = u; ServerParamsBase.SetParam("Connection", "PrevLogon", PulsarQuery.ContextQuery.User.OID); this.DialogResult = DialogResult.OK; this.Close(); return; } catch(Exception Err) { Sim.Controls.ErrorBox.Show(Err); } }
//------------------------------------------------------------------------------------- #region << Form Handlers >> private void AuthForm_Load(object sender, EventArgs e) { try { PulsarQuery q = new PulsarQuery("Persons", "GetNamesList"); Dictionary<OID,string> us = (Dictionary<OID, string>)PulsarConnection.Default.Get(q); FillUsers(us); textBoxPassword.Select(); textBoxPassword.Focus(); } catch(Exception Err) { Sim.Controls.ErrorBox.Show(Err); } }
//------------------------------------------------------------------------------------- #region << Form Handlers >> protected override void OnLoad(EventArgs e) { base.OnLoad(e); try { ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Pulsar", "GetObjectsList"); ToLog(true, q.ToString()); TaskManager.Run("List", this, () => PulsarConnection.Default.Query(q)); } catch(Exception Err) { ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- private void buttonTest_Click(object sender, EventArgs e) { try { PulsarConnection.Default.Address = textBoxServer.Text; PulsarConnection.Default.Port = (int)nudPort.Value; PulsarConnection.Default.ReceiveBufferSize = (int)nudReceiveBuf.Value; PulsarConnection.Default.ReceiveTimeOut = (int)nudReceiveTimeout.Value * 1000; PulsarConnection.Default.SendBufferSize = (int)nudSendBuf.Value; PulsarConnection.Default.SendTimeOut = (int)nudSendTimeout.Value * 1000; try { this.UseWaitCursor = true; Application.DoEvents(); PulsarQuery q = new PulsarQuery("Pulsar", "Status"); q.Context = new Context(); q.Params = PulsarQueryParams.Servant; object obj = PulsarConnection.Default.Get(q); if(obj == null) throw new Exception("Статус сервера не определен!"); //if(query["Status"] == null || (PulsarServantStatus)query["Status"] != PulsarServantStatus.Ready) // throw new Exception("Статус сервера не положителен!"); string msg = String.Format("Соединение с сервером {0} успешно установлено!", PulsarConnection.Default.ToString()); MessageBox.Show(msg, "Тест соединения", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch(Exception exc) { string msg = String.Format("Ошибка соединения с сервером {0}:\n\n{1}", PulsarConnection.Default.ToString(), exc.Message); MessageBox.Show(msg, "Тест соединения", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch(Exception Err) { Sim.Controls.ErrorBox.Show(Err); } this.UseWaitCursor = false; }
/// <summary> /// Выполняет запрос на Пульсаре (с модицикацией). /// </summary> /// <param name="query">Запрос.</param> /// <param name="pars">Параметры сериализации запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public object Modify(PulsarQuery query, PulsarSerializationParams pars, Action<PulsarAnswer> messageHandler = null) { query.Params |= PulsarQueryParams.Modify; pars.Mode = PulsarSerializationMode.ForClient; return Query(query, pars, messageHandler: messageHandler).Return; }
/// <summary> /// Выполняет запрос на Пульсаре (с модицикацией). /// </summary> /// <param name="query">Запрос.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public object Modify(PulsarQuery query, Action<PulsarAnswer> messageHandler = null) { query.Params |= PulsarQueryParams.Modify; return Query(query, messageHandler: messageHandler).Return; }
//------------------------------------------------------------------------------------- /// <summary> /// Выполняет запрос на Пульсаре. /// </summary> /// <param name="objName">Имя объекта Пульсара.</param> /// <param name="query">Строка запроса.</param> /// <param name="args">Аргументы запроса.</param> /// <param name="pars">Параметры запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public object Exec(object objName, string query = null, object args = null, PulsarQueryParams pars = PulsarQueryParams.None, Action<PulsarAnswer> messageHandler = null) { PulsarQuery q = new PulsarQuery(objName, query, args, pars); return Query(q, messageHandler: messageHandler).Return; }
//------------------------------------------------------------------------------------- void frm_DialogClosed(object sender, DialogResult result) { try { SimModalDualInputBox frm = (SimModalDualInputBox)sender; frm.DialogClosed -= new Sim.Controls.DialogClosedEventHandler(frm_DialogClosed); if(result == DialogResult.Cancel) return; if(frm.Tag == null) { foreach(SecurityGroup g in psec.SecurityGroups.Values) if(g.Name.ToLower() == frm.Value1.ToLower()) { string text = String.Format("Группа безопасности \"{0}\" уже существует.\nВведите другое имя группы.", frm.Value1); SimModalMessageBox.Show(PanelBack, text, "Ошибка создания группы безопасности", MessageBoxIcon.Error); return; } SecurityGroup gr = new SecurityGroup(); gr.Name = frm.Value1; gr.Description = frm.Value2; ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SecurityGroups.Add", new { Add = new object[] {gr.SID, gr } }, PulsarQueryParams.Modify); TaskManager.Run("AddGroup", this, () => PulsarConnection.Default.Exec(q), gr); } else { SecurityGroup gr = ((SecurityGroup)frm.Tag).Clone(); gr.Name = frm.Value1; gr.Description = frm.Value2; ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SecurityGroups.Item.Name", new { Item = gr.SID, Name = gr.Name }, PulsarQueryParams.Modify); TaskManager.Run("UpdNameGroup", this, () => PulsarConnection.Default.Exec(q), gr); PulsarQuery q2 = new PulsarQuery("Security", "SecurityGroups.Item.Description", new { Item = gr.SID, Description = gr.Description }, PulsarQueryParams.Modify); TaskManager.Run("UpdDescGroup", this, () => PulsarConnection.Default.Exec(q2), gr); } } catch(Exception Err) { Sim.Controls.ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- /// <summary> /// Выполняет запрос на Пульсаре (с модицикацией). /// </summary> /// <param name="objName">Имя объекта Пульсара.</param> /// <param name="query">Строка запроса.</param> /// <param name="args">Аргументы запроса.</param> /// <param name="pars">Параметры запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static object Modify(string objName, string query = null, object args = null, PulsarQueryParams pars = PulsarQueryParams.None, Action<PulsarAnswer> messageHandler = null) { PulsarQuery q = new PulsarQuery(objName, query, args, pars); q.Params |= PulsarQueryParams.Modify; return Query(q, messageHandler: messageHandler).Return; }
/// <summary> /// Выполняет запрос на Пульсаре. /// </summary> /// <param name="query">Запрос.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static object Exec(PulsarQuery query, Action<PulsarAnswer> messageHandler = null) { return Query(query, messageHandler: messageHandler).Return; }
//------------------------------------------------------------------------------------- /// <summary> /// Получает объект Пульсара. /// </summary> /// <param name="query">Объект запроса.</param> /// <param name="cacheName">Имя, под которым результат будет взят и сохранен в кэше</param> /// <returns></returns> public static object Get(PulsarQuery query, string cacheName) { return Get(query, null, null, cacheName); }
//------------------------------------------------------------------------------------- /// <summary> /// Метод запроса к серверу Пульсара. /// </summary> /// <param name="query">Объект запроса.</param> /// <param name="noStub">Типы объектов, которые не должны быть заглушены при отправке запроса.</param> /// <param name="noSer">Типы объектов, которые не должны быть сериализованы при отправке запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static PulsarAnswer Query(PulsarQuery query, IEnumerable<Type> noStub = null, IEnumerable<Type> noSer = null, Action<PulsarAnswer> messageHandler = null) { PulsarSerializationParams pars = new PulsarSerializationParams(); pars.NoStubTypes = noStub; pars.AsEmptyTypes = noSer; pars.Mode = PulsarSerializationMode.ForClient; return Query(query, pars, messageHandler); }
//------------------------------------------------------------------------------------- private void btnRefreshPulsarList_Click(object sender, EventArgs e) { try { ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Pulsar", "GetObjectsList"); ToLog(true, q.ToString()); TaskManager.Run("List", this, () => PulsarConnection.Default.Query(q)); } catch(Exception Err) { ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- #region << Controls Handlers>> private void buttonSend_Click(object sender, EventArgs e) { try { ftgvView.Tree = null; List<Object> noStub = new List<Object>(); PulsarQuery q = new PulsarQuery(); q.RootObject = tbObj.Text; q.Query = tbQuery.Text.TrimAll().Length == 0 ? null : tbQuery.Text.TrimAll(); if(tbArgs.Text.TrimAll().Length > 0) { q.Args = ParamsDic.FromString(tbArgs.Text.Replace('|', '¦')); foreach(string p in q.Args.Params.ToArray()) if(q.Args[p] is string && ((string)q.Args[p]).StartsWith("$") && ((string)q.Args[p]).EndsWith("$")) q.Args[p] = store[((string)q.Args[p]).Replace("$", "")].Object; else if(q.Args[p] is string && ((string)q.Args[p]).StartsWith("&") && ((string)q.Args[p]).EndsWith("&")) { q.Args[p] = store[((string)q.Args[p]).Replace("&", "")].Object; noStub.Add(q.Args[p]); } } q.NoStubTypes = noStubList.Count > 0 ? noStubList.ToArray() : null; q.NoSerTypes = noSerList.Count > 0 ? noSerList.ToArray() : null; if(chbModify.Checked) q.Params |= PulsarQueryParams.Modify; if(chbNonPublic.Checked) q.Params |= PulsarQueryParams.NonPublic; if(chbServant.Checked) q.Params |= PulsarQueryParams.Servant; if(chbCode.Checked) q.Params |= PulsarQueryParams.Code; if(chbVerbose.Checked) q.Params |= PulsarQueryParams.Verbose; if(chbNoStubEs.Checked) q.Params |= PulsarQueryParams.NoStubEssences; PulsarSerializationParams pars = new PulsarSerializationParams(); pars.Mode = PulsarSerializationMode.ForClient; pars.NoStubObjects = noStub.ToArray(); ShowProgressWindow(); if(q.Params.HasFlag(PulsarQueryParams.Verbose)) TaskManager.Run("Query", this, () => PulsarConnection.Default.Query(q, pars, messageHandler: (a) => ToLog(null, a.ToString()))); else TaskManager.Run("Query", this, () => PulsarConnection.Default.Query(q, pars)); ToLog(true, q.ToString()); } catch(Exception Err) { ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- /// <summary> /// Удаление дочерних групп и пользователей /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnChildDel_Click(object sender, EventArgs e) { try { if(fdgvChilds.SelectedRows.Count == 0) return; SecurityGroup gr = (SecurityGroup)((IKeyedValue)fdgvGroups.SelectedRows[0].GetData()).Value; if(SimModalMessageBox.Show(PanelBack, String.Format("Вы действительно желаете исключить выбранные элементы из группы \"{0}\"?", gr.Name), "Исключение групп или пользователей", MessageBoxIcon.Question, MessageBoxButtons.YesNo) != DialogResult.Yes) return; foreach(DataGridViewRow r in fdgvChilds.SelectedRows) childsList.Remove((SecurityItem)r.GetData()); List<OID> list = new List<OID>(); foreach(SecurityItem i in childsList) list.Add(i.SID); ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SetChildSidLinks", new { SetChildSidLinks = new Object[] { gr.SID, list } }, PulsarQueryParams.Modify); TaskManager.Run("SetChilds", this, () => PulsarConnection.Default.Exec(q), new ValuesPair<OID, List<OID>>(gr.SID, list)); } catch(Exception Err) { Sim.Controls.ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- void SimModalMultiChoiceBox_DialogClosed(object sender, DialogResult result) { try { SimModalMultiChoiceBox frm = (SimModalMultiChoiceBox)sender; frm.DialogClosed -= new DialogClosedEventHandler(SimModalMultiChoiceBox_DialogClosed); if(result == DialogResult.Cancel || frm.Tag == null) return; SecurityGroup gr = (SecurityGroup)((IKeyedValue)fdgvGroups.SelectedRows[0].GetData()).Value; if((int)frm.Tag == 1) { List<OID> list = new List<OID>(); foreach(object i in (System.Collections.IList)frm.Choices) list.Add(((SecurityItem)i).SID); foreach(SecurityItem i in parentsList) list.Add(i.SID); ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SetParentsSidLinks", new { SetParentsSidLinks = new Object[] { gr.SID, list } }, PulsarQueryParams.Modify); TaskManager.Run("SetParents", this, () => PulsarConnection.Default.Exec(q), new ValuesPair<OID, List<OID>>(gr.SID, list)); } else if((int)frm.Tag == 2) { List<OID> list = new List<OID>(); foreach(object i in (System.Collections.IList)frm.Choices) list.Add(((SecurityItem)i).SID); foreach(SecurityItem i in childsList) list.Add(i.SID); ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SetChildSidLinks", new { SetChildSidLinks = new Object[] { gr.SID, list } }, PulsarQueryParams.Modify); TaskManager.Run("SetChilds", this, () => PulsarConnection.Default.Exec(q), new ValuesPair<OID, List<OID>>(gr.SID, list)); } } catch(Exception Err) { Sim.Controls.ModalErrorBox.Show(Err, PanelBack); } }
//------------------------------------------------------------------------------------- /// <summary> /// Удаление группы. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelGroup_Click(object sender, EventArgs e) { try { if(fdgvGroups.SelectedRows.Count == 0) { btnDelGroup.Enabled = false; return; } SecurityGroup gr = (SecurityGroup)((IKeyedValue)fdgvGroups.SelectedRows[0].GetData()).Value; if(SimModalMessageBox.Show(PanelBack, "Вы действительно желаете удалить группу " + gr.Name + "?", "Удаление группы безопасности", MessageBoxIcon.Question, MessageBoxButtons.YesNo) != DialogResult.Yes) return; ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SecurityGroups.Remove", new { Remove = gr.SID }, PulsarQueryParams.Modify); TaskManager.Run("DelGroup", this, () => PulsarConnection.Default.Exec(q), gr); } catch(Exception Err) { Sim.Controls.ModalErrorBox.Show(Err, PanelBack); } }
/// <summary> /// Метод запроса к серверу Пульсара. /// </summary> /// <param name="query">Объект запроса.</param> /// <param name="pars">Параметры сериализации запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static PulsarAnswer Query(PulsarQuery query, PulsarSerializationParams pars, Action<PulsarAnswer> messageHandler = null) { TcpClient cl = null; Stream ns = null; try { OnDataAccessBegin(); if(query == null) throw new ArgumentNullException("query"); cl = new TcpClient(); cl.ReceiveTimeout = ReceiveTimeOut * 1000; cl.ReceiveBufferSize = ReceiveBufSize ; cl.SendTimeout = SendTimeOut * 1000; cl.SendBufferSize = SendBufSize; cl.Connect(Address.ToString(), Port); ns = cl.GetStream(); if(messageHandler != null) query.Params |= PulsarQueryParams.Verbose; if(pars == null) pars = new PulsarSerializationParams() { Mode = PulsarSerializationMode.ForClient }; using(MemoryStream temp = PulsarSerializer.Serialize(query, pars)) { byte[] buf = new byte[cl.SendBufferSize]; int bytes; while((bytes = temp.Read(buf, 0, buf.Length)) != 0) ns.Write(buf, 0, bytes); } Stopwatch sw = null; if(traceLevel >= 3) sw = Stopwatch.StartNew(); if(traceLevel >= 5) { ns = new DebugStream(ns, "c:\\temp"); Debug.WriteLine(((DebugStream)ns).DebugFileName); } PulsarAnswer answer = null; do { answer = (PulsarAnswer)PulsarSerializer.Deserialize(ns, LoadEssences); if(answer.Answer == PulsarAnswerStatus.Error) throw new PulsarServerException((answer.Return ?? "").ToString()); if(answer.Answer == PulsarAnswerStatus.Message || answer.Answer == PulsarAnswerStatus.ErrorMessage) { if(messageHandler != null) messageHandler(answer); continue; } break; } while(true); if(traceLevel >= 3) { sw.Stop(); Debug.WriteLine("{0}: {1}", Thread.CurrentThread.Name, sw.Elapsed); Debug.Flush(); } return answer; } catch { throw; } finally { if(ns != null) ns.Close(); if(cl != null) cl.Close(); OnDataAccessEnd(); } }
//------------------------------------------------------------------------------------- private void btnSetPass_Click(object sender, EventArgs e) { try { Person u = ((ComboBoxItem<Person>)comboBoxUsers.SelectedItem).Key; string msg = String.Format("Веедите пароль для [{0}].\r\n NULL - пустой пароль (сброс пароля).", u.FullName); string pass = ""; if(SimModalInputBox.Show(PanelBack, ref pass, "Установка пароля", msg, global::Sim.AdminForms.Properties.Resources.Keys) != System.Windows.Forms.DialogResult.OK) return; if(String.IsNullOrWhiteSpace(pass) || pass.Length < 3) { SimModalMessageBox.Show(PanelBack, "Пароль не соответствует требованиям безопасности!", "Ошибка ввода пароля", MessageBoxIcon.Error); return; } ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SetUserPass", new { SetUserPass = new Object[] { u.OID, pass == "NULL" ? 0 : Hash.GetCRC32(pass)} }, PulsarQueryParams.Modify); TaskManager.Run("SetPass", this, () => PulsarConnection.Default.Exec(q)); } catch(Exception Err) { ModalErrorBox.Show(Err, PanelBack); } }
/// <summary> /// Получает объект Пульсара. /// </summary> /// <param name="query">Объект запроса.</param> /// <param name="noStub">Типы объектов, которые не должны быть заглушены при отправке запроса.</param> /// <param name="noSer">Типы объектов, которые не должны быть сериализованы при отправке запроса.</param> /// <param name="cacheName">Имя, под которым результат будет взят и сохранен в кэше.</param> /// <returns></returns> public static object Get(PulsarQuery query, IEnumerable<Type> noStub = null, IEnumerable<Type> noSer = null, string cacheName = null) { Mutex mut = null; try { if(cacheName != null) { lock(ObjectsCache) { if(ObjectsCache.ContainsKey(cacheName)) { if(ObjectsCache[cacheName] is Mutex) mut = (Mutex)ObjectsCache[cacheName]; else return ObjectsCache[cacheName]; } else ObjectsCache.Add(cacheName, (mut = new Mutex())); } if(mut != null) mut.WaitOne(); lock(ObjectsCache) { if(ObjectsCache.ContainsKey(cacheName) && ObjectsCache[cacheName] is Mutex == false) return ObjectsCache[cacheName]; } } PulsarAnswer answer = Query(query, noStub, noSer); if(answer.Return == null) throw new PulsarServerException("Выполнив запрос \"{0}\" к объекту [{1}] сервер не передал результат!", query.Query, query.Object); if(cacheName != null) lock(ObjectsCache) { if(ObjectsCache.ContainsKey(cacheName)) ObjectsCache[cacheName] = answer.Return; else if(cacheName != null) ObjectsCache.Add(cacheName, answer.Return); } return answer.Return; } finally { if(mut != null) mut.ReleaseMutex(); } }
//------------------------------------------------------------------------------------- private void btnSave_Click(object sender, EventArgs e) { try { OID sd = (OID)fdgvACL.Tag; PList<ACE> list = new PList<ACE>(ACL.Count); foreach(ACEitem i in ACL) list.Add(i.ACE); if(pSec.ACEs.ContainsKey(sd)) foreach(ACE i in pSec.ACEs[sd]) if(at != null && at.Contains(i.SID) == false) list.Add(i); ShowProgressWindow(); PulsarQuery q = new PulsarQuery("Security", "SetACEsForSD", new { SetACEsForSD = new Object[] { sd, list } }, PulsarQueryParams.Modify); TaskManager.Run("SetACEsForSD",this,()=> PulsarConnection.Default.Exec(q), new ValuesPair<OID, PList<ACE>>(sd, list)); } catch(Exception Err) { ModalErrorBox.Show(Err, PanelBack); HideProgressWindow(); } }
/// <summary> /// Выполняет запрос на Пульсаре. /// </summary> /// <param name="query">Запрос.</param> /// <param name="noStub">Типы объектов, которые не должны быть заглушены при отправке запроса.</param> /// <param name="noSer">Типы объектов, которые не должны быть сериализованы при отправке запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static object Exec(PulsarQuery query, Type[] noStub, Type[] noSer = null, Action<PulsarAnswer> messageHandler = null) { return Query(query, noStub, noSer, messageHandler: messageHandler).Return; }
/// <summary> /// Метод запроса к серверу Пульсара. /// </summary> /// <param name="query">Объект запроса.</param> /// <param name="pars">Параметры сериализации запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public PulsarAnswer Query(PulsarQuery query, PulsarSerializationParams pars, Action<PulsarAnswer> messageHandler = null) { TcpClient cl = null; Stream ns = null; try { OnDataAccessBegin(); if(query == null) throw new ArgumentNullException("query"); cl = new TcpClient(); cl.ReceiveTimeout = ReceiveTimeOut; cl.ReceiveBufferSize = ReceiveBufferSize; cl.SendTimeout = SendTimeOut; cl.SendBufferSize = SendBufferSize; cl.Connect(Address.ToString(), Port); ns = cl.GetStream(); ns.WriteByte((byte)QueryType.Object); if(messageHandler != null) query.Params |= PulsarQueryParams.Verbose; if(pars == null) pars = new PulsarSerializationParams() { Mode = PulsarSerializationMode.ForClient }; using(MemoryStream temp = PulsarSerializer.Serialize(query, pars)) { byte[] buf = new byte[cl.SendBufferSize]; int bytes; while((bytes = temp.Read(buf, 0, buf.Length)) != 0) ns.Write(buf, 0, bytes); } PulsarAnswer answer = null; do { answer = (PulsarAnswer)PulsarSerializer.Deserialize(ns); if(answer.Answer == PulsarAnswerStatus.Error) throw new PulsarServerException((answer.Return ?? "").ToString()); if(answer.Answer == PulsarAnswerStatus.TestMessage || answer.Answer == PulsarAnswerStatus.ErrorMessage) { if(messageHandler != null) messageHandler(answer); continue; } break; } while(true); return answer; } catch { throw; } finally { if(ns != null) ns.Close(); if(cl != null) cl.Close(); OnDataAccessEnd(); } }
/// <summary> /// Выполняет запрос на Пульсаре (с модицикацией). /// </summary> /// <param name="query">Запрос.</param> /// <param name="noStub">Типы объектов, которые не должны быть заглушены при отправке запроса.</param> /// <param name="noSer">Типы объектов, которые не должны быть сериализованы при отправке запроса.</param> /// <param name="messageHandler">Делегат метода, вызываемый для обработки сообщений сервера.</param> /// <returns></returns> public static object Modify(PulsarQuery query, Type[] noStub, Type[] noSer = null, Action<PulsarAnswer> messageHandler = null) { query.Params |= PulsarQueryParams.Modify; return Query(query, noStub, noSer, messageHandler: messageHandler).Return; }
private void finButtonSave_Click(object sender, EventArgs e) { try { object obj = fdgvList.CurrentRow.GetData(); PulsarQuery q = new PulsarQuery(); var pars = new Pulsar.Serialization.PulsarSerializationParams(); if(_pers.Contains(obj)) { throw new Exception("Оставлено до лучших времен"); } else { q.RootObject = "Persons"; q.Query = "Add"; q.Args = new ParamsDic(); q.Args["Add"] = obj; pars.NoStubObjects = new [] { obj }; } ShowProgressWindow(); TaskManager.Run("Save",this,()=> PulsarConnection.Default.Modify(q, pars), obj); } catch(Exception Err) { Sim.Controls.ModalErrorBox.Show(Err, PanelBack); } }