예제 #1
0
        /// <inheritdoc />
        public override void Write(IChannelHandlerContext context, object message, IPromise promise)
        {
            if (!(message is IHttpRequest request))
            {
                _ = context.WriteAsync(message, promise);
                return;
            }

            if (this.upgradeRequested)
            {
                Util.SafeSetFailure(promise, ThrowHelper.GetInvalidOperationException_Attempting(), Logger);
                return;
            }

            this.upgradeRequested = true;
            this.SetUpgradeRequestHeaders(context, request);

            // Continue writing the request.
            _ = context.WriteAsync(message, promise);

            // Notify that the upgrade request was issued.
            _ = context.FireUserEventTriggered(UpgradeEvent.UpgradeIssued);
            // Now we wait for the next HTTP response to see if we switch protocols.
        }