All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.socket.engineio.server.Transport Maven / Gradle / Ivy

package io.socket.engineio.server;

import io.socket.engineio.server.parser.Packet;
import io.socket.engineio.server.parser.Parser;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * Base class for all transports.
 */
public abstract class Transport extends Emitter {

    protected final Parser mParser;
    protected ReadyState mReadyState;

    protected Transport(Parser parser) {
        mParser = parser;
        mReadyState = ReadyState.OPEN;
    }

    /**
     * Get the query parameters of the initial HTTP request.
     *
     * @return Query parameters of the initial HTTP request.
     */
    public abstract Map getInitialQuery();

    /**
     * Get the headers of the initial HTTP request.
     *
     * @return Headers of the initial HTTP request.
     */
    public abstract Map> getInitialHeaders();

    /**
     * Handle a client HTTP request.
     *
     * @param request The HTTP request object.
     * @param response The HTTP response object.
     * @throws IOException On IO error.
     */
    public abstract void onRequest(HttpServletRequest request, HttpServletResponse response) throws IOException;

    /**
     * Send a list of packets over the transport.
     *
     * @param packets List of packets to send.
     */
    public abstract void send(List> packets);

    /**
     * Checks whether the transport is currently writable.
     *
     * @return Boolean value indicating if transport can be written to.
     */
    public abstract boolean isWritable();

    /**
     * Get the name of this transport.
     *
     * @return Name of transport.
     */
    public abstract String getName();

    /**
     * Transport specific logic for closing transport.
     */
    protected abstract void doClose();

    /**
     * Close the transport if not already closed.
     */
    public void close() {
        if(mReadyState != ReadyState.CLOSED && mReadyState != ReadyState.CLOSING) {
            mReadyState = ReadyState.CLOSING;
            doClose();
        }
    }

    /**
     * Called by child class to indicate error with transport.
     *
     * @param reason Reason of error.
     * @param description Description of error.
     */
    protected void onError(String reason, String description) {
        if(this.listeners("error").size() > 0) {
            emit("error", reason, description);
        }
    }

    /**
     * Called by child to indicate a packet receive from remote client.
     *
     * @param packet Packet received by transport.
     */
    protected void onPacket(Packet packet) {
        emit("packet", packet);
    }

    /**
     * Called by child to indicate data received from remote client.
     *
     * @param data Encoded data received by transport.
     */
    protected void onData(Object data) {
        onPacket(mParser.decodePacket(data));
    }

    /**
     * Called by child to indicate closure of transport.
     */
    protected void onClose() {
        mReadyState = ReadyState.CLOSED;
        emit("close");
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy