/// <summary> /// 设置文件读取 /// </summary> /// <param name="reader"></param> /// <returns></returns> private bool set(TmphReader reader) { TmphInterlocked.NoCheckCompareSetSleep0(ref readerLock); if (currentReader == null) { currentReader = reader; readerLock = 0; reader.FileStream = this; return true; } currentReader.Next = reader; readerLock = 0; return false; }
/// <summary> /// 读取下一个文件数据 /// </summary> /// <param name="reader"></param> /// <returns></returns> private TmphReader next(TmphReader reader) { TmphInterlocked.NoCheckCompareSetSleep0(ref readerLock); var nextReader = reader.Next; if (nextReader == null) currentReader = null; else if ((reader.Next = nextReader.Next) == null) currentReader = reader; readerLock = 0; return nextReader; }
/// <summary> /// 文件读取 /// </summary> /// <param name="index">读取文件位置</param> /// <param name="onReaded">读取文件回调函数</param> /// <returns></returns> public static TmphReader Get(TmphIndex index, Func<TmphAsynchronousMethod.TmphReturnValue<TmphTcpBase.TmphSubByteArrayEvent>, bool> onReaded) { var reader = TmphTypePool<TmphReader>.Pop(); if (reader == null) { try { reader = new TmphReader(); } catch { return null; } } reader.onReaded = onReaded; reader.index = index; return reader; }
/// <summary> /// 等待缓存写入 /// </summary> /// <param name="reader"></param> private void wait(TmphReader reader) { var endIndex = reader.EndIndex; if (endIndex <= fileLength) { if (set(reader)) reader.Read(); return; } flush(true); if (isDisposed == 0) { if (set(reader)) reader.Read(); } else reader.Cancel(); }