public static GetRequestId ( byte message ) : ulong | ||
message | byte | |
return | ulong |
public async Task <byte[]> ReadAsync(CancellationToken cancellationToken) { if (Volatile.Read(ref _pipe._hostEnd) == null) { throw new PipeDisconnectedException(); } var handshake = _pipe._handshake; if (_isFirstRead) { _isFirstRead = false; if (handshake != null) { _pipe.LogMessage(MessageOrigin.Host, handshake, replay: true); return(handshake); } } byte[] message; if (_pipe._unsentPendingRequests.Count != 0) { message = _pipe._unsentPendingRequests.Dequeue(); _pipe.LogMessage(MessageOrigin.Host, message, replay: true); } else { message = await _pipe._hostMessages.ReceiveAsync(cancellationToken); } if (message == _disconnectMessage) { throw new PipeDisconnectedException(); } else if (handshake == null) { _pipe._handshake = message; } else { ulong requestId = MessageParser.GetRequestId(message); if (requestId == ulong.MaxValue) { ulong id = MessageParser.GetId(message); _pipe._sentPendingRequests.TryAdd(id, message); } } return(message); }
public void Write(byte[] message) { _pipe.LogMessage(MessageOrigin.Client, message); var requestId = MessageParser.GetRequestId(message); if (requestId == 0) { if (MessageParser.IsNamed(message, _cancelAllMessageName)) { _pipe._sentPendingRequests.Clear(); } } else { _pipe._sentPendingRequests.TryRemove(requestId, out var request); } _pipe._clientMessages.Post(message); }