Beispiel #1
0
 /// <summary>
 /// Старт записи в поток
 /// </summary>
 /// <param name="stream">Поток</param>
 /// <param name="bloc">Записываемый блок</param>
 /// <param name="streamExectContext">Контекст записи</param>
 public static void BeginWrite(this Stream stream, BinaryBloc bloc, IStreamExectContext streamExectContext) =>
 streamExectContext.Exect(bloc.Id, id => {
     new StreamState {
         Bloc    = bloc,
         Stream  = stream,
         BufSize = bloc.Buffer.Length,
         Context = streamExectContext
     }.BeginWrite(EndWrite);
 });
Beispiel #2
0
 /// <summary>
 /// Старт чтения потока
 /// </summary>
 /// <param name="stream">Источник</param>
 /// <param name="streamExectContext">контекст чтения</param>
 /// <param name="bufSize">Размер буфера чтения. Если не задан - то поблочное чтение, где размер блока это первые 4 байта</param>
 public static void BeginRead(this Stream stream, IStreamExectContext streamExectContext, int?bufSize = null) =>
 streamExectContext.Exect(streamExectContext.GetId(), id => {
     new StreamState {
         Bloc = new BinaryBloc {
             Id = id, Buffer = new byte[bufSize ?? stream.ReadInt()]
         },
         Stream  = stream,
         BufSize = bufSize,
         Context = streamExectContext
     }.BeginRead(EndRead);
 });
Beispiel #3
0
 private static void Exect(this IStreamExectContext context, long id, Action <long> action)
 {
     try {
         if (!context.OnWillStart(id))
         {
             return;
         }
         action.Invoke(id);
     }
     catch (Exception e) {
         context.OnException(e);
     }
     finally {
         context.OnDidStart(id);
     }
 }
Beispiel #4
0
        private static bool TryComplite(this IStreamExectContext context, Func <BinaryBloc> action)
        {
            try {
                var bloc = action?.Invoke();

                if (context.OnComplite(bloc) || bloc == null)
                {
                    return(false);
                }
            }
            catch (Exception e) {
                context?.OnException(e);
                return(false);
            }

            return(true);
        }