예제 #1
0
        private void SendWriter(ExtendedBinaryWriter writer)
        {
            writer?.Flush();

            var fullUri = new Uri(_uri, "diag?sid=" + _sessionId + (_contextName != null ? "&ctx=" + _contextName : ""));

            var binaryContent = writer != null
                ? (writer.BaseStream as MemoryStream).ToArray()
                : Array.Empty <byte>();

            using (var content = new ByteArrayContent(binaryContent))
            {
                try
                {
                    var response     = _client.PostAsync(fullUri, content).Result;
                    var responseBody = response.Content.ReadAsStringAsync().Result;
                    if (responseBody != "ACK")
                    {
                        _communicationErrorCount++;
                    }
                }
                catch (Exception)
                {
                    _communicationErrorCount++;
                }
            }

            writer?.BaseStream.Dispose();
            writer?.Dispose();
        }
예제 #2
0
        public void Write(string name, string bases, int seqOffset = 0)
        {
            _writer.Flush();
            long position = _stream.Position;

            _refSeqNames.Add(name);
            _refSeqIndex.Add(new SequenceIndexEntry
            {
                NumBases       = bases.Length,
                FileOffset     = position,
                SequenceOffset = seqOffset
            });

            _sequenceCompressor.Compress(bases, _twoBitSequence);

            // sort the masked intervals
            var sortedMaskedIntervals = _twoBitSequence.MaskedIntervals.OrderBy(x => x.Begin).ThenBy(x => x.End).ToList();

            _refSeqMaskedIntervals.Add(sortedMaskedIntervals);
            _writer.Write(_twoBitSequence.Buffer, 0, _twoBitSequence.NumBufferBytes);
        }
예제 #3
0
        /// <summary>
        /// protected implementation of Dispose pattern.
        /// </summary>
        private void Dispose(bool disposing)
        {
            if (disposing)
            {
                // write a negative length
                _writer.WriteOpt(-1);


                // write the intervals
                WriteSupplementaryIntervals();

                // write the guard integer
                _writer.Flush();
                _eofOffset = _stream.Position;
                _writer.Write(SupplementaryAnnotationCommon.GuardInt);

                // update the offsets in the header
                _stream.Position = _offsetHeader;
                _writer.Write(_dataSourceVersionsOffset);
                _writer.Write(_dataOffset);
                _writer.Write(_intervalOffset);
                _writer.Write(_eofOffset);

                // close the file streams
                _writer.Dispose();
                _stream.Dispose();
                _index.Write(_saPath + ".idx", _currentRefSeq);
            }

            // reset all the class variables
            _stream = null;

            _dataSourceVersionsOffset = 0;
            _dataOffset     = 0;
            _eofOffset      = 0;
            _offsetHeader   = 0;
            _intervalOffset = 0;

            _index = null;
        }
        internal void Write(List <Creation.ReferenceSequence> referenceSequences)
        {
            _writer.Flush();

            long indexOffset = _stream.Position;
            int  indexSize   = 8 + IndexEntry.Size * referenceSequences.Count;

            var    buffers  = new List <ReferenceBuffer>(referenceSequences.Count);
            ushort refIndex = 0;

            foreach (var referenceSequence in referenceSequences)
            {
                buffers.Add(referenceSequence.GetReferenceBuffer(refIndex));
                refIndex++;
            }

            IndexEntry[] index = CreateIndex(buffers, indexOffset, indexSize);

            WriteIndex(index);
            WriteReferenceBuffers(buffers);
        }
        public static byte[] Compress(byte[] uncompressedData)
        {
            using (var outputMemoryStream = new MemoryStream())
            {
                using (var output = new ExtendedBinaryWriter(outputMemoryStream))
                {
                    var pos        = 0;
                    var chunkCount = (int)(uncompressedData.Length / (double)CHUNK_SIZE_UNC_MAX);
                    while (pos < uncompressedData.Length)
                    {
                        var data = CompressChunk(uncompressedData, ref pos);
                        output.Write((ushort)(data.Length + 2));
                        output.Write(data);
                        output.Write((byte)chunkCount);
                        chunkCount--;
                    }
                    output.Flush();
                }

                return(outputMemoryStream.ToArray());
            }
        }