private void Initialize() { _acceptSaeaPool = new SaeaPool(16, 32, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { Loger.Error(ex.Message, ex); } }); _handleSaeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { Loger.Error(ex.Message, ex); } }); _sessionPool = new SessionPool(1024, int.MaxValue, () => { var session = new TcpSocketSaeaSession(_configuration, _configuration.BufferManager, _handleSaeaPool, _dispatcher, this); return(session); }, (session) => { try { session.Clear(); } catch (Exception ex) { Loger.Error(ex.Message, ex); } }); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialPooledBufferCount, _configuration.ReceiveBufferSize); _saeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); }
private static SaeaAwaitable OperateAsync(Socket socket, SaeaAwaitable awaitable, Func <Socket, SaeaAwaitable, bool> operation) { if (socket == null) { throw new ArgumentNullException("socket"); } if (awaitable == null) { throw new ArgumentNullException("awaitable"); } var awaiter = awaitable.GetAwaiter(); lock (awaiter.SyncRoot) { if (!awaiter.IsCompleted) { throw new InvalidOperationException( "A socket operation is already in progress using the same awaitable SAEA."); } awaiter.Reset(); if (awaitable.ShouldCaptureContext) { awaiter.SyncContext = SynchronizationContext.Current; } } try { if (!operation.Invoke(socket, awaitable)) { awaiter.Complete(); } } catch (SocketException ex) { awaiter.Complete(); awaitable.Saea.SocketError = ex.SocketErrorCode != SocketError.Success ? ex.SocketErrorCode : SocketError.SocketError; } catch (Exception) { awaiter.Complete(); awaitable.Saea.SocketError = SocketError.Success; throw; } return(awaitable); }
public SaeaAwaiter(SaeaAwaitable awaitable) { _awaitable = awaitable; _awaitable.Saea.Completed += delegate { var continuation = _continuation ?? Interlocked.CompareExchange(ref _continuation, SENTINEL, null); if (continuation != null) { Complete(); if (continuation != SENTINEL) Task.Run(continuation); } }; }
public SaeaAwaiter(SaeaAwaitable awaitable) { _awaitable = awaitable; _awaitable.Saea.Completed += delegate { var continuation = _continuation ?? Interlocked.CompareExchange(ref _continuation, SENTINEL, null); if (continuation != null) { Complete(); if (continuation != SENTINEL) { Task.Run(continuation); } } }; }
public SaeaAwaiter(SaeaAwaitable awaitable) { _awaitable = awaitable; _awaitable.Saea.Completed += delegate { var continuation = _continuation ?? Interlocked.CompareExchange(ref _continuation, SENTINEL, null); if (continuation != null) { Complete(); if (continuation != SENTINEL) { Task.Factory.StartNew(continuation, TaskCreationOptions.PreferFairness); } } }; }
private static SaeaAwaitable OperateAsync(Socket socket, SaeaAwaitable awaitable, Func<Socket, SaeaAwaitable, bool> operation) { if (socket == null) throw new ArgumentNullException("socket"); if (awaitable == null) throw new ArgumentNullException("awaitable"); var awaiter = awaitable.GetAwaiter(); lock (awaiter.SyncRoot) { if (!awaiter.IsCompleted) throw new InvalidOperationException( "A socket operation is already in progress using the same await-able SAEA."); awaiter.Reset(); } try { if (!operation.Invoke(socket, awaitable)) awaiter.Complete(); } catch (SocketException ex) { awaiter.Complete(); awaitable.Saea.SocketError = ex.SocketErrorCode != SocketError.Success ? ex.SocketErrorCode : SocketError.SocketError; } catch (Exception) { awaiter.Complete(); awaitable.Saea.SocketError = SocketError.Success; throw; } return awaitable; }
private void Initialize() { _saeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { Loger.Error(ex.Message, ex); } }); }
private void Initialize() { _saeaPool = new SaeaPool( () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) // initialize SAEA error occurred { _log.Error(ex.Message, ex); } }) .Initialize(256); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialBufferAllocationCount, _configuration.ReceiveBufferSize); _saeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialBufferAllocationCount, _configuration.ReceiveBufferSize); _acceptSaeaPool = new SaeaPool(16, 32, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); _handleSaeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); _sessionPool = new SessionPool(1024, int.MaxValue, () => { var session = new TcpSocketSaeaSession(_configuration, _bufferManager, _handleSaeaPool, _dispatcher, this); return session; }, (session) => { try { session.Clear(); } catch (Exception ex) { _log.Error(ex.Message, ex); } }); }
public static SaeaAwaitable SendAsync(this Socket socket, SaeaAwaitable awaitable) { return(OperateAsync(socket, awaitable, SEND)); }
public static SaeaAwaitable ReceiveAsync(this Socket socket, SaeaAwaitable awaitable) { return(OperateAsync(socket, awaitable, RECEIVE)); }
public static SaeaAwaitable DisonnectAsync(this Socket socket, SaeaAwaitable awaitable) { return(OperateAsync(socket, awaitable, DISCONNECT)); }
public static SaeaAwaitable AcceptAsync(this Socket socket, SaeaAwaitable awaitable) { return(OperateAsync(socket, awaitable, ACCEPT)); }
public SaeaAwaiter(SaeaAwaitable awaitable) { _awaitable = awaitable; _awaitable.Saea.Completed += OnSaeaCompleted; }
public static SaeaAwaitable AcceptAsync(this Socket socket, SaeaAwaitable awaitable) { return OperateAsync(socket, awaitable, ACCEPT); }
public static SaeaAwaitable SendAsync(this Socket socket, SaeaAwaitable awaitable) { return OperateAsync(socket, awaitable, SEND); }
public static SaeaAwaitable ReceiveAsync(this Socket socket, SaeaAwaitable awaitable) { return OperateAsync(socket, awaitable, RECEIVE); }
public static SaeaAwaitable DisonnectAsync(this Socket socket, SaeaAwaitable awaitable) { return OperateAsync(socket, awaitable, DISCONNECT); }