GetRequestId() public static method

public static GetRequestId ( byte message ) : ulong
message byte
return ulong
Beispiel #1
0
            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);
            }
Beispiel #2
0
            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);
            }