public static StompFrame newConnectedFrame(String sessionId, Version version) { StompControlFrame frame = new StompControlFrame( Command.CONNECTED ); frame.setHeader( Header.SESSION, sessionId ); String implVersion = StompFrames.class.getPackage().getImplementationVersion(); frame.setHeader( Header.SERVER, "Stilts/" + implVersion ); if (version.isAfter( Version.VERSION_1_0 )) { frame.setHeader( Header.VERSION, version.versionString() ); } return frame; }
public static String supportedVersions() { Version[] versions = Version.values(); String[] supportedVersions = new String[versions.length]; for (int i = 0; i < versions.length; i++) { supportedVersions[i] = versions[i].versionString; } return StringUtils.join( supportedVersions, "," ); }
@Override public void nack(String transactionId) throws Exception { if (version.isBefore( Version.VERSION_1_1 )) { throw new StompException("Cannot nack prior to STOMP version 1.1."); } DefaultHeaders nackHeaders = new DefaultHeaders(); nackHeaders.put( Header.MESSAGE_ID, this.headers.get( Header.MESSAGE_ID ) ); nackHeaders.put( Header.SUBSCRIPTION, this.headers.get( Header.SUBSCRIPTION ) ); if (transactionId == null) { transactionId = this.headers.get( Header.TRANSACTION ); } if (transactionId != null) { nackHeaders.put( Header.TRANSACTION, transactionId ); } client.sendFrame( StompFrames.newNackFrame( nackHeaders ) ); }
@Override public void channelConnected(ChannelHandlerContext context, ChannelStateEvent e) throws Exception { StompControlFrame frame = new StompControlFrame( Command.CONNECT ); frame.setHeader( Header.HOST, this.host ); frame.setHeader( Header.ACCEPT_VERSION, Version.supportedVersions() ); Channels.write( context.getChannel(), frame ); }
public static Version forVersionString(String versionString) { for (Version version : Version.values()) { if (versionString.equals( version.versionString )) return version; } return null; }
@Override protected void handleControlFrame(ChannelHandlerContext channelContext, StompFrame frame) { String version = frame.getHeader( Header.VERSION ); if (version != null) { getClientContext().setVersion( Version.forVersionString( version ) ); } Channel channel = channelContext.getChannel(); channelContext.sendUpstream( new UpstreamChannelStateEvent( channel, ChannelState.CONNECTED, channel.getRemoteAddress() ) ); channelContext.getPipeline().replace( this, "stomp-disconnection-negotiator", new StompDisconnectionNegotiator( getClientContext() ) ); getClientContext().setConnectionState( State.CONNECTED ); }