Example #1
0
		//-------------------------------------------------------------------------------------
		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);
			}
		}
Example #2
0
		//-------------------------------------------------------------------------------------
		#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);
			}
		}
Example #3
0
		//-------------------------------------------------------------------------------------
		#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);
			}
		}
Example #4
0
		//-------------------------------------------------------------------------------------
		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;
		}
Example #5
0
		/// <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;
		}
Example #6
0
		/// <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;
		}
Example #7
0
		//-------------------------------------------------------------------------------------
		/// <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;
		}
Example #8
0
		//-------------------------------------------------------------------------------------
		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);
			} 
		}
Example #9
0
 //-------------------------------------------------------------------------------------
 /// <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;
 }
Example #10
0
 /// <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;
 }
Example #11
0
 //-------------------------------------------------------------------------------------
 /// <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);
 }
Example #12
0
 //-------------------------------------------------------------------------------------
 /// <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);
 }
Example #13
0
		//-------------------------------------------------------------------------------------
		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);
			}
		}
Example #14
0
		//-------------------------------------------------------------------------------------
		#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);
			}
		}
Example #15
0
		//-------------------------------------------------------------------------------------
		/// <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);
			}
		}
Example #16
0
		//-------------------------------------------------------------------------------------
		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);
			}
		}
Example #17
0
		//-------------------------------------------------------------------------------------
		/// <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);
			}
		}
Example #18
0
  /// <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();
   }
  }
Example #19
0
		//-------------------------------------------------------------------------------------
		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);
			}
		}
Example #20
0
  /// <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();
   }
  }
Example #21
0
		//-------------------------------------------------------------------------------------
		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();
			}
		}
Example #22
0
 /// <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;
 }
Example #23
0
		/// <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();
			}
		}
Example #24
0
 /// <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;
 }
Example #25
0
		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);
			}
		}