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" } }; }
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);
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); } }
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); } }
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"); } }
public Task <long> NextMove(int offset) { return(FiberRw.NextMove(offset)); }