public WorkerClient(WorkerProcess process, IWorkerServer serverProxy) { this.process = process; this.id = "[client:" + process.Id + "]"; this.serverProxy = serverProxy; if (this.serverProxy is MarshalByRefObject) { this.proxyLifetimeSponsor.Register((MarshalByRefObject)this.serverProxy); } this.process.ProcessDeadEvent += this.OnProcessDead; this.serverProxy.ServerDyingEvent += this.OnServerDying; this.serverProxy.ServerReadyEvent += this.OnServerReady; this.serverProxy.TaskFailedEvent += this.OnRemoteTaskFailed; this.serverProxy.TaskCanceledEvent += this.OnRemoteTaskCanceled; this.serverProxy.TaskSucceededEvent += this.OnRemoteTaskSucceeded; }
private /*protected virtual*/ void Dispose(bool disposing) { if (disposing) { if (this.remoteProxy != null) { this.remoteProxy.ServerDyingEvent -= this.OnServerDying; this.remoteProxy.ServerReadyEvent -= this.OnServerReady; this.remoteProxy.TaskFailedEvent -= this.OnTaskFailed; this.remoteProxy.TaskCanceledEvent -= this.OnTaskCanceled; this.remoteProxy.TaskSucceededEvent -= this.OnTaskSucceeded; this.remoteProxy.Dispose(); this.remoteProxy = null; this.proxySponsor.Close(); } } DecrementProxyRef(disposing); }
private void Connect(Guid ipcguid) { if (this.remoteProxy != null) { throw new InvalidOperationException("Already connected."); } var server = (WorkerServer)RemotingServices.Connect(typeof(WorkerServer), string.Format(CultureInfo.InvariantCulture, @"ipc://{0}/{1}", ipcguid, typeof(WorkerServer).FullName) ); this.proxySponsor.Register(server); this.remoteProxy = server; this.remoteProxy.ServerDyingEvent += this.OnServerDying; this.remoteProxy.ServerReadyEvent += this.OnServerReady; this.remoteProxy.TaskFailedEvent += this.OnTaskFailed; this.remoteProxy.TaskCanceledEvent += this.OnTaskCanceled; this.remoteProxy.TaskSucceededEvent += this.OnTaskSucceeded; }