public Task SendAsync(INetworkPacket package) { if (package == null) { throw new ArgumentNullException(nameof(package)); } if (_socket == null) { throw new NullReferenceException(nameof(_socket)); } if (_serializer == null) { throw new NullReferenceException(nameof(_serializer)); } if (_endpoint == null) { throw new NullReferenceException(nameof(_endpoint)); } using (var stream = new MemoryStream()) { var length = _serializer.Serialize(package, stream); var state = new OrderedAsyncState(); state.Client = _socket; state.ReadEventArgs.RemoteEndPoint = _endpoint; state.ReadEventArgs.SetBuffer(stream.ToArray(), 0, length); state.ReadEventArgs.AcceptSocket = _socket; state.ReadEventArgs.UserToken = state; state.ReadEventArgs.Completed += OnCompleted; state.ReceiveAsync = e => { var receiveBuffer = new byte[MAX_BUFFER_SIZE]; e.SetBuffer(receiveBuffer, 0, receiveBuffer.Length); return(e.AcceptSocket.ReceiveAsync(e)); }; var result = _socket.SendToAsync(state.ReadEventArgs); return(Task.CompletedTask); } }
public bool ListenAsync() { _socket.Bind(_endpoint); _socket.Listen(1); var state = new OrderedAsyncState(); state.ReadEventArgs.UserToken = state; state.ReadEventArgs.Completed += OnCompleted; state.ReceiveAsync = e => { var receiveBuffer = new byte[MAX_BUFFER_SIZE]; e.SetBuffer(receiveBuffer, 0, receiveBuffer.Length); return(e.AcceptSocket.ReceiveAsync(e)); }; return(_socket.AcceptAsync(state.ReadEventArgs)); }
public bool ListenAsync() { var state = new OrderedAsyncState(); state.Client = _socket; state.ReadEventArgs.RemoteEndPoint = _endpoint ?? throw new ArgumentNullException(nameof(_endpoint)); // used to bind state.ReadEventArgs.SetBuffer(new byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); state.ReadEventArgs.AcceptSocket = _socket; state.ReadEventArgs.UserToken = state; state.ReadEventArgs.Completed += OnCompleted; state.ReceiveAsync = e => { var receiveBuffer = new byte[MAX_BUFFER_SIZE]; e.SetBuffer(receiveBuffer, 0, receiveBuffer.Length); return(e.AcceptSocket.ReceiveFromAsync(e)); }; _socket.Bind(_endpoint); return(_socket.ReceiveFromAsync(state.ReadEventArgs)); }