Beispiel #1
0
        private unsafe void read(fastCSharp.code.cSharp.tcpBase.subByteArrayEvent buffer, Func <fastCSharp.net.returnValue <fastCSharp.code.cSharp.tcpBase.subByteArrayEvent>, bool> onReturn)
        {
            fileBlockStream fileStream = this.fileStream;
            subArray <byte> data       = buffer.Buffer;

            if (fileStream != null && data.length == sizeof(fileBlockStream.index))
            {
                fileBlockStream.index index;

                fixed(byte *bufferFixed = buffer.Buffer.array) index = *(fileBlockStream.index *)bufferFixed;

                fileStream.Read(onReturn, ref index);
            }
            else
            {
                onReturn(default(fastCSharp.code.cSharp.tcpBase.subByteArrayEvent));
            }
        }
Beispiel #2
0
 public void Wait()
 {
     WaitFileStream.wait(this);
     WaitFileStream = null;
 }
Beispiel #3
0
 /// <summary>
 /// 文件分块服务
 /// </summary>
 /// <param name="fileName">文件全名</param>
 public fileBlockServer(string fileName)
 {
     fileStream = new fileBlockStream(fileName);
 }
Beispiel #4
0
            /// <summary>
            /// 开始读取文件
            /// </summary>
            public unsafe void Read()
            {
                do
                {
                    int readSize = index.Size + sizeof(int);
                    try
                    {
                        if (FileStream.isDisposed == 0)
                        {
                            buffer = (memoryPool = memoryPool.GetOrCreate(readSize)).Get();
                            FileStream fileReader = FileStream.fileReader;
                            long       offset     = fileReader.Position - index.Index;
                            if (offset >= 0 || -offset < index.Index)
                            {
                                fileReader.Seek(offset, SeekOrigin.Current);
                            }
                            else
                            {
                                fileReader.Seek(index.Index, SeekOrigin.Begin);
                            }
                            if (fileReader.Read(buffer, 0, readSize) == readSize)
                            {
                                fixed(byte *bufferFixed = buffer)
                                {
                                    if (*(int *)bufferFixed == index.Size)
                                    {
                                        readSize = index.Size;
                                    }
                                    else
                                    {
                                        log.Default.Add(FileStream.FileName + " index[" + index.Index.toString() + "] size[" + (*(int *)bufferFixed).toString() + "]<>" + index.Size.toString(), new System.Diagnostics.StackFrame(), false);
                                    }
                                }
                            }
                            else
                            {
                                readSize = 0;
                            }
                        }
                    }
                    catch (Exception error)
                    {
                        log.Default.Add(error, null, false);
                    }
                    Func <fastCSharp.net.returnValue <fastCSharp.code.cSharp.tcpBase.subByteArrayEvent>, bool> onReaded = this.onReaded;
                    if (readSize == index.Size)
                    {
                        if (onReaded(new fastCSharp.code.cSharp.tcpBase.subByteArrayEvent {
                            Buffer = subArray <byte> .Unsafe(buffer, sizeof(int), index.Size), SerializeEvent = memoryPool
                        }))
                        {
                            buffer = null;
                        }
                        else
                        {
                            memoryPool.Push(ref buffer);
                        }
                    }
                    else
                    {
                        onReaded(default(fastCSharp.code.cSharp.tcpBase.subByteArrayEvent));
                        if (memoryPool != null)
                        {
                            memoryPool.Push(ref buffer);
                        }
                    }
                    reader next = FileStream.next(this);
                    if (next == null)
                    {
                        FileStream = null;
                        onReaded   = null;
                        memoryPool = null;
                        typePool <reader> .PushNotNull(this);

                        return;
                    }
                    onReaded      = next.onReaded;
                    index         = next.index;
                    next.onReaded = null;
                    typePool <reader> .PushNotNull(next);
                }while (true);
            }