/// <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); }