private List <Tuple> Read(TupleSchema tupleSchema) { var listTuple = TupleSpace.Read(tupleSchema); if (listTuple.Count > 0) { Log("Read (first tuple): " + listTuple.First()); } return(listTuple); }
public Message ProcessRequest(Request request) { var tupleSchema = new TupleSchema(request.Tuple); if (request.GetType() == typeof(WriteRequest)) { TupleSpace.Write(request.Tuple); // notify a blocked thread that tried to read/take this tuple before Request readOrTakeRequest = GetAndRemoveSinglePendingRequest(request.Tuple); if (readOrTakeRequest != null) { PulseMessage(readOrTakeRequest); } // Send back an Ack of the write return(new Ack(EndpointURL, request)); } if (request.GetType() == typeof(ReadRequest)) { List <Tuple> tuples = TupleSpace.Read(tupleSchema); while (!tuples.Any()) { lock (PendingRequestList){ PendingRequestList.Add(request); } WaitMessage(request, View.Nodes); tuples = TupleSpace.Read(tupleSchema); } Response response = new Response(request, tuples, EndpointURL); return(response); } if (request.GetType() == typeof(TakeRequest)) { tupleSchema = new TupleSchema(request.Tuple); List <Tuple> resultTuples = TupleSpace.Take(tupleSchema); Response response = null; while (!resultTuples.Any()) { lock (PendingRequestList){ PendingRequestList.Add(request); } WaitMessage(request, View.Nodes); resultTuples = TupleSpace.Take(tupleSchema); } // "lock" the tuples taken from the tuple space LockedTuples.TryAdd(request.SeqNum, resultTuples); response = new Response(request, resultTuples, EndpointURL); SendMessageToRemoteURL(request.SrcRemoteURL, response); return(response); } throw new NotImplementedException(); }
public void Read0() { var result = _tupleSpace.Read(_tuple1Schema); Assert.IsEmpty(result); }