コード例 #1
0
        private List <Tuple> Read(TupleSchema tupleSchema)
        {
            var listTuple = TupleSpace.Read(tupleSchema);

            if (listTuple.Count > 0)
            {
                Log("Read (first tuple): " + listTuple.First());
            }
            return(listTuple);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        public void Read0()
        {
            var result = _tupleSpace.Read(_tuple1Schema);

            Assert.IsEmpty(result);
        }