private void SendFile(string absolutePath, string fileName, Client client) { FileStream fileStream = new FileStream(absolutePath, FileMode.Open, FileAccess.Read); byte[] buffer = new byte[maxSegmentSize]; long length = fileStream.Length; long segmentCount = 1; long totalSegments = (long)Math.Ceiling((double)length / buffer.Length); long pos = 0; Console.WriteLine("File length: " + length); while (pos < length) { int bytesRead = fileStream.Read(buffer, 0, buffer.Length); byte[] data = new byte[bytesRead]; Array.Copy(buffer, 0, data, 0, bytesRead); FyzrPacket packet = FileProtocol.CreateFilePacket(data, fileName, MessageProtocol.MessageType.PRIVATE, null); packet.headers.Add("Total-Length", "" + length); packet.headers.Add("Total-Segments", "" + totalSegments); packet.headers.Add("Segment", "" + segmentCount); packet.headers.Add("Position", "" + pos); client.SendRandom(FyzrParser.ToData(packet)); pos += buffer.Length; Console.WriteLine("Count: " + segmentCount++); Console.WriteLine("Bytes read: " + bytesRead); } }
internal void SendMediaFile(ChatWindow chatWindow, string absolutePath, string fileName, MediaMessage msg) { var client = chats.FirstOrDefault(x => x.Value == chatWindow).Key; FileStream fileStream = new FileStream(absolutePath, FileMode.Open, FileAccess.Read); byte[] buffer = new byte[maxSegmentSize]; long length = fileStream.Length; long segmentCount = 1; long sizeCount = 0; long totalSegments = (long)Math.Ceiling((double)length / buffer.Length); long pos = 0; Console.WriteLine("File length: " + length); while (pos < length) { int bytesRead = fileStream.Read(buffer, 0, buffer.Length); sizeCount += bytesRead; byte[] data = new byte[bytesRead]; Array.Copy(buffer, 0, data, 0, bytesRead); FyzrPacket packet = FileProtocol.CreateFilePacket(data, fileName, MessageProtocol.MessageType.PRIVATE, null); packet.headers.Add("Total-Length", "" + length); packet.headers.Add("Total-Segments", "" + totalSegments); packet.headers.Add("Segment", "" + segmentCount); packet.headers.Add("Position", "" + pos); packet.headers.Add("File-Type", "Media"); packet.headers.Add("Username", ownUsername); client.SendRandom(FyzrParser.ToData(packet)); msg.Loading = ((double)segmentCount * 100.0 / totalSegments); msg.Progress = SizeSuffix(sizeCount) + "/" + SizeSuffix(length); pos += buffer.Length; Console.WriteLine("Count: " + segmentCount++); Console.WriteLine("Bytes read: " + bytesRead); Thread.Sleep(2); } }