package org.yamcs.web.websocket; import org.yamcs.ProcessorException; import org.yamcs.Processor; import org.yamcs.api.ws.WSConstants; import org.yamcs.protobuf.Web.WebSocketServerMessage.WebSocketReplyData; /** * A resource bundles a set of logically related operations. * Instances of this class are created for every client session separately. */ public abstract class AbstractWebSocketResource { protected Processor processor; protected WebSocketProcessorClient client; protected WebSocketFrameHandler wsHandler; public AbstractWebSocketResource(WebSocketProcessorClient client) { this.client = client; this.processor = client.getProcessor(); wsHandler = client.getWebSocketFrameHandler(); } /** * Process a request and return a reply. * The reply can be null if the implementor of the resource takes care itself of sending the reply * - this has been added because the parameterClient wants to send some date data immediately after reply */ public abstract WebSocketReplyData processRequest(WebSocketDecodeContext ctx, WebSocketDecoder decoder) throws WebSocketException; /** * Called when the web socket is closed */ public abstract void quit(); protected static WebSocketReplyData toAckReply(int requestId) { return WebSocketReplyData.newBuilder() .setProtocolVersion(WSConstants.PROTOCOL_VERSION) .setSequenceNumber(requestId) .build(); } public void switchProcessor(Processor oldProcessor, Processor newProcessor) throws ProcessorException { this.processor = newProcessor; } }