Ejemplo n.º 1
0
        private void ParseResponse(byte[] responseBytes, out Basics.DSS.IDSS reservationObject)
        {
            reservationObject = null;

            if (responseBytes == null)
            {
                return;
            }

            Stream       contentStream = null;
            BinaryReader binaryReader  = null;

            contentStream = new MemoryStream(responseBytes, 0, responseBytes.Length, false);
            binaryReader  = new BinaryReader(contentStream);

            /*
             * <- \BYTE\BYTE\CHARS{BYTEVALUELENGTH}\LONG
             * <- \BYTE
             */

            if (binaryReader.ReadByte() == 2)
            {
                throw new ReservationCreationException();
            }

            byte   reservationIDLength = binaryReader.ReadByte();
            string reservationID       =
                new string(binaryReader.ReadChars(reservationIDLength));
            DateTime expireDate =
                new DateTime(binaryReader.ReadInt64());

            reservationObject = new ExternalDSS(ref this._RequestHandler, ref this._ResponseHandler, reservationID, expireDate);
        }
Ejemplo n.º 2
0
        public VariablePool(string sessionID, string keyID, ref Basics.DSS.IDSS reservation)
        {
            this.SessionID = sessionID;
            this.KeyID     = keyID;

            this._Reservation = reservation;
        }
Ejemplo n.º 3
0
        private bool Get(string uniqueID, out Basics.DSS.IDSS reservationObject)
        {
            reservationObject = null;

            if (string.IsNullOrEmpty(uniqueID))
            {
                return(false);
            }

            if (!this._ReservationTable.TryGetValue(uniqueID, out reservationObject))
            {
                return(false);
            }

            if (((IDSSService)reservationObject).IsExpired)
            {
                reservationObject = null;

                return(false);
            }

            ((IDSSService)reservationObject).Extend();

            return(true);
        }
Ejemplo n.º 4
0
        public void Reserve(string uniqueID, int reservationTimeout, out Basics.DSS.IDSS reservationObject)
        {
            if (this.Get(uniqueID, out reservationObject))
            {
                return;
            }

            this.Create(uniqueID, reservationTimeout, out reservationObject);
        }
Ejemplo n.º 5
0
        private void Create(string uniqueID, int reservationTimeout, out Basics.DSS.IDSS reservationObject)
        {
            if (string.IsNullOrEmpty(uniqueID))
            {
                throw new ReservationCreationException();
            }

            reservationObject = new MemoryDSS(uniqueID, reservationTimeout);

            if (!this._ReservationTable.TryAdd(uniqueID, reservationObject))
            {
                throw new ReservationCreationException();
            }
        }
Ejemplo n.º 6
0
        public void Reserve(string uniqueID, int reservationTimeout, out Basics.DSS.IDSS reservationObject)
        {
            this.MakeConnection();

            BinaryWriter binaryWriter  = null;
            Stream       requestStream = null;

            try
            {
                requestStream = new MemoryStream();
                binaryWriter  = new BinaryWriter(requestStream);

                /*
                 * -> \LONG\ACQ\SHORT
                 * -> \LONG\ACQ\SHORT\BYTE\CHARS{BYTEVALUELENGTH}
                 */

                binaryWriter.Write("ACQ".ToCharArray());
                binaryWriter.Write(reservationTimeout);
                binaryWriter.Write((byte)uniqueID.Length);
                binaryWriter.Write(uniqueID.ToCharArray());
                binaryWriter.Flush();

                long requestID =
                    this._RequestHandler.MakeRequest(((MemoryStream)requestStream).ToArray());

                byte[] responseBytes =
                    this._ResponseHandler.WaitForMessage(requestID);

                this.ParseResponse(responseBytes, out reservationObject);
            }
            finally
            {
                if (binaryWriter != null)
                {
                    binaryWriter.Close();
                }

                if (requestStream != null)
                {
                    requestStream.Close();
                    GC.SuppressFinalize(requestStream);
                }
            }
        }
Ejemplo n.º 7
0
 public ReservationEnclosure(string sessionID, ref Basics.DSS.IDSS reservation)
 {
     this.SessionID    = sessionID;
     this._Reservation = reservation;
 }