public static object PushHdd(bufferType buftype, IEnumerable <byte[]> data, string filename) { //log.Debug($"Push buftype {buftype}"); List <Task> TaskList = new List <Task>(); object arg = new TaskHddArgs() { filename = filename, buftype = buftype, data = data }; TaskHDDJob(arg); return(null); }
private static int TaskHDDJob(object args) { TaskHddArgs arg = (TaskHddArgs)args; string filename = arg.filename; bufferType buftype = arg.buftype; IEnumerable <byte[]> data = arg.data; try { using (var stream = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None)) { var messageType = (int)buftype; //+ 8 bytes (= last crc64 bytes) var header = BitConverter.GetBytes(messageType) // 4 bytes -> message type .Concat(BitConverter.GetBytes(data.Count())); // 4 bytes -> how many buffers var headerCrc = Crc64.Compute(0, header.ToArray()); header = header.Concat(BitConverter.GetBytes(headerCrc)); // 8 byte -> crc of this header //log.Debug($"Get stream"); //using (var stream = client.GetStream()) { if (SendHeader(stream, header)) { SendBuffers(stream, data); } //log.Debug($"Closing ip stream."); stream.Flush(); stream.Close(); } //client.Close(); log.Debug($"File {filename} was updated."); } } catch (Exception ex) { log.Error($"Unable to write to {filename}. Ex: {ex}"); } return(0); }