Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }