Exemple #1
0
        /// <summary>
        ///     Send datagram to the given endpoint (asynchronous)
        /// </summary>
        /// <param name="endpoint">Endpoint to send</param>
        /// <param name="buffer">Datagram buffer to send</param>
        /// <param name="offset">Datagram buffer offset</param>
        /// <param name="size">Datagram buffer size</param>
        /// <returns>'true' if the datagram was successfully sent, 'false' if the datagram was not sent</returns>
        public virtual Boolean SendAsync(EndPoint endpoint, Byte[] buffer, Int64 offset, Int64 size)
        {
            if (_sending)
            {
                return(false);
            }

            if (!IsStarted)
            {
                return(false);
            }

            if (size == 0)
            {
                return(true);
            }

            // Fill the main send buffer
            _sendBuffer.Append(buffer, offset, size);

            // Update statistic
            BytesSending = _sendBuffer.Size;

            // Update send endpoint
            _sendEndpoint = endpoint;

            // Try to send the main buffer
            Task.Factory.StartNew(TrySend);

            return(true);
        }
        public NetworkDataBuffer ReceiveBinary()
        {
            NetworkDataBuffer result = new NetworkDataBuffer();

            if (!webSocketNetwork.WsHandshaked)
            {
                return(result);
            }

            NetworkDataBuffer cache = new NetworkDataBuffer();

            // Receive WebSocket frame data
            while (!webSocketNetwork.WsReceived)
            {
                Int32 required = webSocketNetwork.RequiredReceiveFrameSize();
                cache.Resize(required);
                Int32 received = (Int32)base.Receive(cache.Data, 0, required);
                if (received != required)
                {
                    return(result);
                }

                webSocketNetwork.PrepareReceiveFrame(cache.Data, 0, received);
            }

            // Copy WebSocket frame data
            result.Append(webSocketNetwork.WsReceiveBuffer.ToArray(), webSocketNetwork.WsHeaderSize, webSocketNetwork.WsHeaderSize + webSocketNetwork.WsPayloadSize);
            webSocketNetwork.PrepareReceiveFrame(null, 0, 0);
            return(result);
        }