public void Remove(Tuple tuple) { Console.WriteLine("Remove o tuplo: " + tuple); View actualView = this.GetView(); List <ITupleSpaceXL> serversObj = new List <ITupleSpaceXL>(); ITupleSpaceXL tupleSpace = null; //save remoting objects of all members of the view foreach (string serverPath in actualView.Servers) { try { tupleSpace = (ITupleSpaceXL)Activator.GetObject(typeof(ITupleSpaceXL), serverPath); tupleSpace.ItemCount(); //just to check availability of the server } catch (Exception) { tupleSpace = null; } if (tupleSpace != null) { serversObj.Add(tupleSpace); } } foreach (ITupleSpaceXL server in serversObj) { try { RemoteAsyncSecondPhaseDelegate RemoteDel = new RemoteAsyncSecondPhaseDelegate(server.remove); IAsyncResult RemAr = RemoteDel.BeginInvoke(tuple, _workerId, null, null); } catch (Exception) { } } Console.WriteLine("** FRONTEND REMOVE: Just removed " + tuple); }
public Tuple Read(Tuple tuple) { readHandles = new AutoResetEvent[1]; readHandles[0] = new AutoResetEvent(false); View actualView = this.GetView(); List <ITupleSpaceXL> serversObj = new List <ITupleSpaceXL>(); List <string> toRemove = new List <string>(); ITupleSpaceXL tupleSpace = null; _responseRead = null; //save remoting objects of all members of the view foreach (string serverPath in actualView.Servers) { try { tupleSpace = (ITupleSpaceXL)Activator.GetObject(typeof(ITupleSpaceXL), serverPath); tupleSpace.ItemCount(); //just to check availability of the server } catch (System.Net.Sockets.SocketException) { tupleSpace = null; toRemove.Add(serverPath); } if (tupleSpace != null) { serversObj.Add(tupleSpace); } } if (serversObj.Count > 0) { foreach (string crashed in toRemove) { //only one can crash so serverObj is obviously online _view = serversObj[0].Remove(crashed); } } else { Console.WriteLine("All servers are dead! Exiting..."); Environment.Exit(1); } foreach (ITupleSpaceXL server in serversObj) { try { RemoteAsyncReadDelegate RemoteDel = new RemoteAsyncReadDelegate(server.read); AsyncCallback RemoteCallback = new AsyncCallback(CallbackRead); IAsyncResult RemAr = RemoteDel.BeginInvoke(tuple, CallbackRead, null); } catch (System.Net.Sockets.SocketException) { Console.WriteLine("** FRONTEND READ: Cannot invoke read on server!"); } } while (_responseRead == null) { Console.WriteLine("** FRONTEND READ: Not yet receive any reply let me wait..."); WaitHandle.WaitAny(readHandles); } _requestId++; Console.WriteLine("** FRONTEND READ: Here is a response: " + _responseRead); return(_responseRead); }