diff --git a/Esiur/Data/DataSerializer.cs b/Esiur/Data/DataSerializer.cs index 7787fa9..cdb8761 100644 --- a/Esiur/Data/DataSerializer.cs +++ b/Esiur/Data/DataSerializer.cs @@ -458,7 +458,7 @@ public static class DataSerializer } else { - return new TDU(TDUIdentifier.True, null, 0); + return new TDU(TDUIdentifier.False, null, 0); } } diff --git a/Esiur/Data/Types/FunctionDef.cs b/Esiur/Data/Types/FunctionDef.cs index 2e817d2..1bd2c90 100644 --- a/Esiur/Data/Types/FunctionDef.cs +++ b/Esiur/Data/Types/FunctionDef.cs @@ -144,7 +144,7 @@ public class FunctionDef : MemberDef { rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]); } - else if (genericRtType == typeof(IEnumerable<>))// || genericRtType == typeof(IAsyncEnumerable<>)) + else if (genericRtType == typeof(IEnumerable<>) || genericRtType == typeof(IAsyncEnumerable<>)) { // get export rtType = TRU.FromType(mi.ReturnType.GetGenericArguments()[0]); diff --git a/Esiur/Esiur.csproj b/Esiur/Esiur.csproj index 536ee39..b9f1eaf 100644 --- a/Esiur/Esiur.csproj +++ b/Esiur/Esiur.csproj @@ -39,6 +39,7 @@ + diff --git a/Esiur/Net/IIP/DistributedConnectionProtocol.cs b/Esiur/Net/IIP/DistributedConnectionProtocol.cs index 2c597ea..6c956f2 100644 --- a/Esiur/Net/IIP/DistributedConnectionProtocol.cs +++ b/Esiur/Net/IIP/DistributedConnectionProtocol.cs @@ -1362,7 +1362,36 @@ partial class DistributedConnection return; } - if (rt is System.Collections.IEnumerable && !(rt is Array || rt is Map || rt is string)) + if (rt is IAsyncEnumerable) + { + var enu = rt as IAsyncEnumerable; + var enumerator = enu.GetAsyncEnumerator(); + Task.Run(async () => + { + try + { + while (await enumerator.MoveNextAsync()) + { + var v = enumerator.Current; + SendChunk(callback, v); + } + + SendReply(IIPPacketReply.Completed, callback); + + if (context != null) + context.Ended = true; + } + catch (Exception ex) + { + if (context != null) + context.Ended = true; + + var (code, msg) = SummerizeException(ex); + SendError(ErrorType.Exception, callback, code, msg); + } + }); + } + else if (rt is System.Collections.IEnumerable && !(rt is Array || rt is Map || rt is string)) { var enu = rt as System.Collections.IEnumerable;