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