12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using System.Diagnostics;
- using System.Windows;
- namespace EEMSServerCore.Hubs;
- internal partial class ClientsMainHub
- {
- private readonly ConcurrentDictionary<Guid, MemoryStream> _streamBuffer = [];
- public readonly ConcurrentDictionary<Guid, string> _savePath = [];
- public Task<bool> FilePack(Guid guid, byte[] buffer, int current, int total)
- {
- Debug.WriteLine($"FilePack {guid} {current} {total}");
- if (!_streamBuffer.TryGetValue(guid, out MemoryStream? stream) || stream is null)
- {
- if (current != 1)
- return Task.FromResult(false);
- stream = new();
- _streamBuffer[guid] = stream;
- Timer timer = new(FileCleanerTimerCallback, guid, 600000, Timeout.Infinite);
- }
- stream.Write(buffer);
- if (current != total)
- return Task.FromResult(true);
- string path = Path.Combine(Environment.CurrentDirectory, "Receive");
- if (!Compressor.DecompressZipFile(new(path), stream))
- return Task.FromResult(false);
- if (_streamBuffer.TryRemove(guid, out MemoryStream? memoryStream) && memoryStream is not null)
- memoryStream.Dispose();
- MessageBox.Show("File Received");
- return Task.FromResult(true);
- }
- private void FileCleanerTimerCallback(object? state)
- {
- if (state is not Guid guid)
- return;
- if (_streamBuffer.TryRemove(guid, out MemoryStream? memoryStream) && memoryStream is not null)
- memoryStream.Dispose();
- }
- }
|