示例#1
0
        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);
        }
示例#2
0
        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);
        }