/// <summary> /// Send socket option message /// </summary> /// <param name="option"></param> /// <param name="value"></param> /// <param name="ct"></param> public async Task SetSocketOptionAsync( SocketOption option, ulong value, CancellationToken ct) { var response = await _socket.Provider.ControlChannel.CallAsync(Proxy, new Message(_socket.Id, RemoteId, new SetOptRequest( new SocketOptionValue(option, value))), ct).ConfigureAwait(false); ProxySocket.ThrowIfFailed(response); }
/// <summary> /// Constructor for proxy link object /// </summary> /// <param name="socket">Owning proxy link</param> /// <param name="remoteId">Remote endpoint id assigned by proxy</param> /// <param name="localAddress">Remote local address</param> /// <param name="peerAddress">Remote peer address</param> /// <returns></returns> internal ProxyLink(ProxySocket socket, INameRecord proxy, Reference remoteId, SocketAddress localAddress, SocketAddress peerAddress) { _streamId = new Reference(); _socket = socket; Proxy = proxy; RemoteId = remoteId; LocalAddress = localAddress; PeerAddress = peerAddress; }
/// <summary> /// Get socket option /// </summary> /// <param name="option"></param> /// <param name="ct"></param> /// <returns></returns> public async Task <ulong> GetSocketOptionAsync( SocketOption option, CancellationToken ct) { var response = await _socket.Provider.ControlChannel.CallAsync(Proxy, new Message(_socket.Id, RemoteId, new GetOptRequest( option)), ct).ConfigureAwait(false); ProxySocket.ThrowIfFailed(response); return(((GetOptResponse)response.Content).OptionValue.Value); }
/// <summary> /// Receive a message /// </summary> /// <param name="buffer"></param> /// <param name="ct"></param> /// <returns></returns> protected async Task <DataMessage> ReceiveAsync( CancellationToken ct) { Message message; while (!Socket.ReceiveQueue.TryDequeue(out message)) { await Socket.ReceiveAsync(ct).ConfigureAwait(false); } ProxySocket.ThrowIfFailed(message); if (message.Error != (int)SocketError.Success) { throw new SocketException((SocketError)message.Error); } if (message.TypeId != MessageContent.Data) { throw new SocketException("No data message"); } return(message.Content as DataMessage); }
/// <summary> /// Constructor /// </summary> /// <param name="socket"></param> internal ListenStream(ProxySocket socket) : base(socket) { }
internal ProxyStream(ProxySocket socket) { Socket = socket; }
/// <summary> /// Constructor /// </summary> /// <param name="socket"></param> internal PacketStream(ProxySocket socket) : base(socket) { }
/// <summary> /// Constructor /// </summary> /// <param name="socket"></param> internal SequentialStream(ProxySocket socket) : base(socket) { }