public async ValueTask <GetFiberRwSSLResult <T> > GetFiberRwSSL <T>(Func <Stream, Task <SslStream> > sslstream_init, Func <Stream, Stream, GetFiberRwResult>?init = null) where T : class
        {
            if (await RStream.WaitStreamInit())
            {
                var mergestream = new MergeStream((RStream as Stream) !, (WStream as Stream) !);

                var sslstream = await sslstream_init(mergestream);

                if (sslstream is null)
                {
                    return new GetFiberRwSSLResult <T> {
                               IsError = true, FiberRw = null, ErrMsg = "sslstream init fail"
                    }
                }
                ;

                var fiber = new FiberRw <T>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, sslstream, sslstream, init: init);
                fibersslT = fiber;
                taskCompletionSource?.TrySetResult(fiber);
                return(new GetFiberRwSSLResult <T> {
                    IsError = false, FiberRw = fiber, ErrMsg = null
                });
            }
            else
            {
                return new GetFiberRwSSLResult <T> {
                           IsError = true, FiberRw = null, ErrMsg = "not install"
                }
            };
        }
        public async ValueTask <GetFiberRwSSLResult <T> > GetFiberRwSSL <T>(X509Certificate certificate_client, string targethost = "localhost", Func <Stream, Stream, GetFiberRwResult>?init = null) where T : class
        {
            if (await RStream.WaitStreamInit())
            {
                var mergestream = new MergeStream((RStream as Stream) !, (WStream as Stream) !);

                var sslstream = new SslStream(mergestream, false, (sender, certificate, chain, errors) => true,
                                              (sender, host, certificates, certificate, issuers) => certificate_client);

                try
                {
                    await sslstream.AuthenticateAsClientAsync(targethost);
                }
                catch (Exception er)
                {
                    return(new GetFiberRwSSLResult <T> {
                        IsError = true, FiberRw = null, ErrMsg = er.Message
                    });
                }

                var fiber = new FiberRw <T>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, sslstream, sslstream, init: init);
                fibersslT = fiber;
                taskCompletionSource?.TrySetResult(fiber);
                return(new GetFiberRwSSLResult <T> {
                    IsError = false, FiberRw = fiber, ErrMsg = null
                });
            }
            else
            {
                return new GetFiberRwSSLResult <T> {
                           IsError = true, FiberRw = null, ErrMsg = "not install"
                }
            };
        }
Exemple #3
0
 public async ValueTask <IFiberRw?> GetFiberRw(Func <Stream, Stream, GetFiberRwResult>?init = null)
 {
     if (await RStream.WaitStreamInit())
     {
         var fiber = new FiberRw <object>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, init: init);
         fiberobj = fiber;
         return(fiber);
     }
     else
     {
         return(default);
Exemple #4
0
 public async ValueTask <IFiberRw <T> > GetFiberRw <T>(Func <Stream, Stream, GetFiberRwResult> init = null) where T : class
 {
     if (await RStream.WaitStreamInit())
     {
         var fiber = new FiberRw <T>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, init: init);
         fiberT = fiber;
         return(fiber);
     }
     else
     {
         return(null);
     }
 }
Exemple #5
0
        public async Task <ReadBytes> Init()
        {
            switch (LenType)
            {
            case LengthSize.Byte:
            {
                Packerlen = await FiberRw.ReadByte();
            }
            break;

            case LengthSize.Int16:
            {
                Packerlen = await FiberRw.ReadUInt16();
            }
            break;

            case LengthSize.Int32:
            {
                Packerlen = (int)await FiberRw.ReadUInt32();
            }
            break;

            case LengthSize.Int64:
            {
                Packerlen = (int)await FiberRw.ReadInt64();
            }
            break;
            }

            Packerlen -= HandLen;


            if (Packerlen > MaxPackerSize)
            {
                throw new System.IO.IOException($"the packer size greater than MaxPackerSize:{Packerlen}");
            }

            if (Packerlen == -1)
            {
                throw new System.IO.IOException($"not read packer size");
            }


            var res = await FiberRw.ReadMemory(Packerlen);

            MemoryOwner = res.MemoryOwner;
            Memory      = res.Value;

            return(this);
        }
 public async ValueTask <IFiberRw <T>?> GetFiberRw <T>(Func <Stream, Stream, GetFiberRwResult>?init = null) where T : class
 {
     if (await RStream.WaitStreamInit())
     {
         var fiber = new FiberRw <T>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, init: init);
         fiberobj = fiber;
         taskCompletionSource?.TrySetResult(fiber);
         return(fiber);
     }
     else
     {
         return(null);
     }
 }
Exemple #7
0
 public async ValueTask <(IFiberRw, string)> GetFiberRwSSL(X509Certificate certificate, Func <Stream, Stream, GetFiberRwResult> init = null)
 {
     if (await RStream.WaitStreamInit())
     {
         var mergestream = new MergeStream(RStream as Stream, WStream as Stream);
         var sslstream   = new SslStream(mergestream, false);
         try
         {
             await sslstream.AuthenticateAsServerAsync(certificate);
         }
         catch (Exception er)
         {
             return(null, er.Message);
         }
         var fiber = new FiberRw <object>(this, RStream, WStream, MemoryPool, Encoding, ObjFormat, IsLittleEndian, sslstream, sslstream, init: init);
         fibersslobj = fiber;
         return(fiber, null);
     }
     else
     {
         return(null, "not install");
     }
 }
Exemple #8
0
 public Task <long> NextMove(int offset)
 {
     return(FiberRw.NextMove(offset));
 }