/// <summary>
		/// Add slave connection to dictionary.
		/// </summary>
		/// <param name="sessionId">Slave service session id.</param>
		/// <param name="callback">IOrationiSlaveCallback</param>
		public void AddSlaveConnection(string sessionId, IOrationiSlaveCallback callback)
		{
			string ip = NetworkUtility.GetClientIpFromOperationContext();
			//Kick existing connection with same sessionId or ip.
			KickExistingConnections(sessionId, ip);

			//Create new slave process worker
			SlaveProcessWorker newSlaveProcessWorker = new SlaveProcessWorker(sessionId, callback, InactiveTimeout);
			SlaveConnections[sessionId] = newSlaveProcessWorker;
		}
Example #2
0
		public SlaveProcessWorker(string sessionId, IOrationiSlaveCallback callback, int inactiveTimeout = 30000)
		{
			SessionId = sessionId;
			Ip = NetworkUtility.GetClientIpFromOperationContext();
			Callback = callback;
			LastActivity = DateTime.Now;
			InactiveTimeout = inactiveTimeout;

			//Save information in Db
			using (MasterContext masterDb = new MasterContext())
			{
				//If slave exist in db - update some information.
				SlaveDescription slave = masterDb.Slaves.FirstOrDefault(s => s.Address == Ip);
				if (slave != null)
				{
					slave.LastConnectionOn = DateTime.Now;
					masterDb.SaveChanges();
					SlaveId = slave.Id;
					return;
				}

				//If slave not exist in db - create new record
				string hostName = NetworkUtility.GetHostName(Ip);
				slave = new SlaveDescription
				{
					Address = Ip,
					//Id = Guid.NewGuid(),
					RegistredOn = DateTime.Now,
					LastConnectionOn = DateTime.Now,
					Name = $"Unknown slave {hostName} ({Ip})"
				};

				masterDb.Slaves.Add(slave);
				masterDb.SaveChanges();

				SlaveId = slave.Id;
			}

#if DEBUG
			Console.WriteLine("Connection from {0} {1}", SessionId, DateTime.Now.ToString("O"));
#endif
		}