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)); } }
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); }
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); } }
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); }
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++; } }
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)); }
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)); }
public FileProtocol(Socket socket) { networkStreamHandler = new NetworkStreamHandler(socket); fileHandler = new FileHandler(); fileStreamHandler = new FileStreamHandler(); }
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()}"); } }