/// <returns></returns> private RemoteController CreateRemoteController(string strMachineName, int iPortNumber) { RemoteController remoteController = null; try { string strRemoteObjUrl = "tcp://" + strMachineName + ":" + iPortNumber.ToString() + "/GalaxyRemoteController"; UrlAttribute urlAttr = new UrlAttribute(strRemoteObjUrl); object[] rgAct = { urlAttr }; remoteController = Activator.CreateInstance(Type.GetType("Galaxy.Tools.RemoteController, RemoteImpLib"), null, rgAct) as RemoteController; remoteController.AddCmdOutputEventSinker(m_cmdOutputEventSinker.OnCmdOutput); remoteController.AddCmdFinishEventSinker(m_cmdOutputEventSinker.OnCmdFinish); remoteController.IsLive(); } catch (Exception e) { // The remote server is offline remoteController = null; Console.WriteLine(e.Message); } // Register the lease sponsor if (remoteController != null) { remoteController.Port = iPortNumber; remoteController.MachineName = strMachineName; ILease lease = RemotingServices.GetLifetimeService(remoteController) as ILease; lease.Register(m_sponsor); } return(remoteController); }
/// <returns> /// null - something wrong /// </returns> private RemoteController GetRemoteController(string strMachineName, int iPortNumber) { RemoteController remoteController = null; if (m_remoteControllerDict.ContainsKey(strMachineName)) { // We have cached the remote controller remoteController = m_remoteControllerDict[strMachineName]; try { remoteController.IsLive(); } catch (Exception) { // The cached remote controller has something wrong, we need to create a new one remoteController = null; } if (remoteController == null) { remoteController = CreateRemoteController(strMachineName, iPortNumber); if (remoteController == null) { // Remove the key m_remoteControllerDict.Remove(strMachineName); } else { // Update the key m_remoteControllerDict[strMachineName] = remoteController; } } } else { // We need to create a remote controller remoteController = CreateRemoteController(strMachineName, iPortNumber); if (remoteController != null) { // Add a new item to the dict m_remoteControllerDict.Add(strMachineName, remoteController); } } return(remoteController); }
private void MonitorCurRemoteController(object objPara) { if (m_curRemoteController != null) { try { m_curRemoteController.IsLive(); } catch (Exception) { m_iCheckTimes++; if (m_iCheckTimes >= 2) { // We have lost the connection to the remote controller for at least 2 mins m_curRemoteController = null; m_remoteControllerDict.Remove(m_strCurRemoteControllerName); Console.WriteLine("Lost connection to the machine!"); m_waitingOutputFinishEvent.Set(); } } } }