io.undertow.server.protocol.framed.FramePriority Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
/*
* JBoss, Home of Professional Open Source.
* Copyright 2014 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.undertow.server.protocol.framed;
import java.util.Deque;
import java.util.List;
/**
*
* Interface that can be used to determine where to insert a given frame into the pending frame queue.
*
* @author Stuart Douglas
*/
public interface FramePriority, R extends AbstractFramedStreamSourceChannel, S extends AbstractFramedStreamSinkChannel> {
/**
* Inserts the new frame at the correct location in the pending frame list. Note that this must
* never insert a frame at the very start of the senders list, as this frame has already been activated.
*
* This method should return true if the frame was successfully inserted into the pending frame list,
* if it returns false the frame must not be inserted and will be added to the held frames list instead.
*
* Frames held in the held frames list are frames that are not yet ready to be included in the pending frame
* list, generally because other frames have to be written first.
*
* Note that if this method returns true without adding the frame the frame will be dropped.
*
* @param newFrame The new frame to insert into the pending frame list
* @param pendingFrames The pending frame list
* @return true if the frame can be inserted into the pending frame list
*/
boolean insertFrame(S newFrame, final List pendingFrames);
/**
* Invoked when a new frame is successfully added to the pending frames queue.
*
* If frames in the held frame queue are now eligible to be sent they can be added
* to the pending frames queue.
*
* Note that if the protocol has explicitly asked for the held frames to be recalculated
* then the added frame may be null.
*
* @param addedFrame The newly added frame
* @param pendingFrames The pending frame queue
* @param holdFrames The held frame queue
*/
void frameAdded(S addedFrame, final List pendingFrames, final Deque holdFrames);
}