Example #1
0
        private async Task <bool> StoreOffset(string consumerGroup, string topic, int partition, long offset, int recursiveCount = 0)
        {
            var filePath  = $"{BasePath}/offsets/{consumerGroup}/{topic}/{partition}.txt";
            var streamKey = $"offset/{consumerGroup}/{topic}/{partition}";

            var(_lock, stream) = FileStreamHandler.GetFileStream(streamKey, filePath);

            if (!stream.CanWrite || !stream.CanRead)
            {
                return(false);
            }

            await OffsetLock.WaitAsync();

            try
            {
                stream.Seek(0, SeekOrigin.Begin);
                await stream.WriteAsync(LZ4MessagePackSerializer.Serialize(offset));

                OffsetLock.Release();
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                OffsetLock.Release();

                if (recursiveCount > 2)
                {
                    return(false);
                }

                return(await StoreOffset(consumerGroup, topic, partition, offset, ++recursiveCount));
            }
        }
Example #2
0
        public async Task Read([FromQuery] string consumerGroup, string topic, int partition, long offset, int amount)
        {
            var filePath  = $"{BasePath}/{topic}/{partition}.txt";
            var streamKey = $"{consumerGroup}/{topic}/{partition}";

            var(_lock, stream) = FileStreamHandler.GetFileStream(streamKey, filePath);

            if (!stream.CanRead || !stream.CanSeek)
            {
                throw new Exception("AArgghh Stream");
            }
            if (!await StoreOffset(consumerGroup, topic, partition, offset))
            {
                throw new Exception("AArgghh Offset");
            }

            var size = (int)Math.Min(amount, stream.Length - offset);

            Response.Headers.Add("Content-Length", size.ToString());

            stream.Seek(offset, SeekOrigin.Begin);
            await stream.MyCopyToAsync(Response.Body, size);

            MessagesReadSizeInBytes.WithLabels($"{topic}/{partition}").Inc(size);
        }
Example #3
0
        static void Main(string[] args)
        {
            //source/target could be either file path or any other based on resource
            var sourceFileName = Path.Combine(Environment.CurrentDirectory, "..\\..\\..\\Source Files\\Document1.xml");
            var targetFileName = Path.Combine(Environment.CurrentDirectory, "..\\..\\..\\Target Files\\Document1.json");
            var fileHandler    = new FileStreamHandler();
            var httpHandler    = new HttpStreamHandler();

            var xmlParser  = new XmlParser <Document>(Mappers.DocumentMapper);
            var jsonParser = new JsonParser <Document>();

            try
            {
                var doc = xmlParser.Read(fileHandler.GetReadStream(sourceFileName));
                jsonParser.Write(doc, fileHandler.GetWriteStream(targetFileName));
                //xmlParser.Write(doc, httpHandler.GetWriteStream(targetFileName));
                //jsonParser.Write(doc, httpHandler.GetWriteStream(targetFileName));
                //jsonParser.Write(doc, fileHandler.GetWriteStream(targetFileName));
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Example #4
0
        public string ReceiveFile()
        {
            var header       = networkStreamHandler.Read(FileHeader.GetLength());
            var fileNameSize = BitConverter.ToInt32(header, 0);
            var fileSize     = BitConverter.ToInt64(header, Specification.FixedFileNameLength);

            var fileName = Encoding.UTF8.GetString(networkStreamHandler.Read(fileNameSize));

            long parts       = SpecificationHelper.GetParts(fileSize);
            long offset      = 0;
            long currentPart = 1;

            while (fileSize > offset)
            {
                byte[] data;
                if (currentPart == parts)
                {
                    var lastPartSize = (int)(fileSize - offset);
                    data    = networkStreamHandler.Read(lastPartSize);
                    offset += lastPartSize;
                }
                else
                {
                    data    = networkStreamHandler.Read(Specification.MaxPacketSize);
                    offset += Specification.MaxPacketSize;
                }
                FileStreamHandler.Write(fileName, data);
                currentPart++;
            }

            return(fileName);
        }
Example #5
0
        public void SendFile(string path)
        {
            long   fileSize = Handler.GetFileSize(path);
            string fileName = Handler.GetFileName(path);
            var    header   = new FileHeader().Create(fileName, fileSize);

            networkStreamHandler.Write(header);

            networkStreamHandler.Write(Encoding.UTF8.GetBytes(fileName));

            long parts = SpecificationHelper.GetParts(fileSize);

            Console.WriteLine("Will Send {0} parts", parts);
            long offset      = 0;
            long currentPart = 1;

            while (fileSize > offset)
            {
                byte[] data;
                if (currentPart == parts)
                {
                    var lastPartSize = (int)(fileSize - offset);
                    data    = FileStreamHandler.Read(path, offset, lastPartSize);
                    offset += lastPartSize;
                }
                else
                {
                    data    = FileStreamHandler.Read(path, offset, Specification.MaxPacketSize);
                    offset += Specification.MaxPacketSize;
                }

                networkStreamHandler.Write(data);
                currentPart++;
            }
        }
Example #6
0
        public async Task <IActionResult> Store([FromQuery] string topic, int partition, int length, int recursiveCount = 0)
        {
            var filePath  = $"{BasePath}/{topic}/{partition}.txt";
            var streamKey = $"{topic}/{partition}";

            var(_lock, stream) = FileStreamHandler.GetFileStream(streamKey, filePath);

            if (!stream.CanSeek || !stream.CanWrite)
            {
                return(StatusCode(500));
            }

            var lengthInBytes = new byte[10];

            BitConverter.GetBytes(length).CopyTo(lengthInBytes, 0);

            var offset = -1L;
            await _lock.WaitAsync();

            try
            {
                stream.Seek(0, SeekOrigin.End);
                offset = stream.Position;

                await stream.WriteAsync(lengthInBytes);

                await Request.Body.CopyToAsync(stream);

                if (stream.Position - offset != length + 10)
                {
                    Console.WriteLine("Stuff got f****d up and we reset!!!");
                    stream.SetLength(offset);
                }

                await stream.FlushAsync();

                _lock.Release();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                if (offset != -1L)
                {
                    stream.SetLength(offset);
                }
                _lock.Release();
                return(StatusCode(500));
            }

            MessagesWrittenSizeInBytes.WithLabels($"{topic}/{partition}").Inc(length);
            return(Ok(offset));
        }
Example #7
0
        public async Task <IActionResult> ReadOffset([FromQuery] string consumerGroup, string topic, int partition)
        {
            var filePath  = $"{BasePath}/offsets/{consumerGroup}/{topic}/{partition}.txt";
            var streamKey = $"offset/{consumerGroup}/{topic}/{partition}";

            var(_lock, stream) = FileStreamHandler.GetFileStream(streamKey, filePath);

            if (!stream.CanSeek || !stream.CanRead)
            {
                return(StatusCode(500));
            }

            var buffer = new byte[8];

            stream.Seek(0, SeekOrigin.Begin);
            await stream.ReadAsync(buffer);

            var offset = LZ4MessagePackSerializer.Deserialize <long>(buffer);

            return(Ok(offset));
        }
Example #8
0
 public FileProtocol(Socket socket)
 {
     networkStreamHandler = new NetworkStreamHandler(socket);
     fileHandler          = new FileHandler();
     fileStreamHandler    = new FileStreamHandler();
 }
Example #9
0
        static void Main(string[] args)
        {
            //Presentation.FindVertexs();
            //Presentation.ParseToObject();

            //Presentation.Interpolation();

            string name_ = "ZROBOT";

            for (var i = 0; i <= 5; i++)
            {
                work(name_ + i);
            }
            work("ZROBOT");

            void work(string name)
            {
                LoadObjFileHandler Obj = new LoadObjFileHandler(name + ".obj");

                Console.WriteLine("File Loaded: " + Obj.LoadObj().ToString());

                SimpleWaveFrontService _WaveService = new SimpleWaveFrontService(Obj);

                FileStreamHandler FileNormal   = new FileStreamHandler(name + "Normals.txt");
                FileStreamHandler FileVertex   = new FileStreamHandler(name + "Vertex.txt");
                FileStreamHandler FileFaces    = new FileStreamHandler(name + "Faces.txt");
                FileStreamHandler FileTextures = new FileStreamHandler("Textures.txt");
                FileStreamHandler Stats        = new FileStreamHandler(name + "Stats.txt");

                _WaveService.LookForVertexs();
                _WaveService.LookForNormals();
                //_WaveService.LookForTextureVertex();
                _WaveService.LookForFaces(2);

                SimpleWaveFront waveFront = _WaveService.WaveFront;

                var vertexs     = waveFront.Vertexs;
                var normals     = waveFront.Normal;
                var textVertexs = waveFront.TexVertexs;
                var faces       = waveFront.Faces;

                #region normals
                Console.WriteLine("\nNomals:\n");
                StringBuilder nr = new StringBuilder();
                foreach (var norm in normals)
                {
                    //Console.Write($"{norm.XAxis}, {norm.YAxis}, {norm.ZAxis}, | ");
                    nr.Append($"{norm.XAxis}, {norm.YAxis}, {norm.ZAxis}, ");
                }
                FileNormal.AppendTextToFIle(nr.ToString());
                Console.WriteLine("\n" + String.Concat(Enumerable.Repeat("_", 120)));
                #endregion


                Console.WriteLine("\nVertex:\n");
                StringBuilder sb = new StringBuilder();
                foreach (var vert in vertexs)
                {
                    //Console.Write($"{vert.XAxis}, {vert.YAxis}, {vert.ZAxis}, | ");
                    //sb.Append($"{{ {vert.XAxis}, {vert.YAxis}, {vert.ZAxis} }}, ");
                    sb.Append($"{vert.XAxis} {vert.YAxis} {vert.ZAxis} ");
                }
                FileVertex.AppendTextToFIle(sb.ToString());
                Console.WriteLine("\n" + String.Concat(Enumerable.Repeat("_", 120)));

                #region texture
                //Console.WriteLine("\nVerTexture:\n");
                //foreach (var tVert in textVertexs)
                //{
                //    Console.Write($"{tVert.XAxis}, {tVert.YAxis} | ");
                //    FileTextures.AppendTextToFIle($"{tVert.XAxis} {tVert.YAxis} ");
                //}
                //Console.WriteLine("\n" + String.Concat(Enumerable.Repeat("_", 120)));
                #endregion


                Console.WriteLine("\nIndicies:\n");
                StringBuilder sa = new StringBuilder();
                foreach (var face in faces)
                {
                    face.VertIndicies.ForEach(a =>
                    {
                        //Console.Write($"{a}, ");
                        //sa.Append(a.ToString() + ", ");
                        sa.Append(a.ToString() + " ");
                    });
                    // Console.Write(" | ");
                }
                FileFaces.AppendTextToFIle(sa.ToString());
                Console.WriteLine("\n" + String.Concat(Enumerable.Repeat("_", 120)) + "\n");

                Stats.AppendTextToFIle($"Vertex: {(vertexs.Count * 3).ToString()} \n");
                Stats.AppendTextToFIle($"Indicies: {(faces.Count * 3).ToString()}");
                Stats.AppendTextToFIle($"Normals: {(normals.Count * 3).ToString()}");
            }
        }