/** * Query transport open state. * * @return true if transport and NATS connection are open. */ @Override public boolean isOpen() { return sub != null && conn.getState() == Nats.ConnState.CONNECTED; }
@Override public synchronized boolean isOpen() { return conn.getState() == Nats.ConnState.CONNECTED; }
@Override public synchronized void open() throws TTransportException { // We only need to check that the NATS client is connected if (conn.getState() != Nats.ConnState.CONNECTED) { throw new TTransportException(TTransportExceptionType.NOT_OPEN, "NATS not connected, has status " + conn.getState()); } }
@Override public boolean isSubscribed() { return conn.getState() == Nats.ConnState.CONNECTED && sub != null && sub.isValid(); }
/** * Subscribes to the configured inbox subject. * * @throws TTransportException if unable to open the transport */ @Override public void open() throws TTransportException { if (conn.getState() != Nats.ConnState.CONNECTED) { throw getClosedConditionException(conn.getState(), "open:"); } if (sub != null) { throw new TTransportException(TTransportExceptionType.ALREADY_OPEN, "NATS transport already open"); } sub = conn.subscribe(inbox, new Handler()); }
@Override protected void flush(byte[] payload) throws TTransportException { if (!isOpen()) { throw getClosedConditionException(conn.getState(), "flush:"); } try { conn.publish(subject, inbox, payload); } catch (IOException e) { throw new TTransportException("request: unable to publish data: " + e.getMessage()); } }
@Override public void subscribe(String topic, FAsyncCallback callback) throws TException { if (conn.getState() != Nats.ConnState.CONNECTED) { throw new TTransportException(TTransportExceptionType.NOT_OPEN, "NATS not connected, has status " + conn.getState()); } subject = topic; if ("".equals(subject)) { throw new TTransportException("Subject cannot be empty."); } sub = conn.subscribe(getFormattedSubject(), queue, msg -> { if (msg.getData().length < 4) { LOGGER.warn("discarding invalid scope message frame"); return; } try { callback.onMessage( new TMemoryInputTransport(Arrays.copyOfRange(msg.getData(), 4, msg.getData().length)) ); } catch (Throwable t) { LOGGER.error("error executing user provided callback", t); } }); }
@Override public void publish(String topic, byte[] payload) throws TTransportException { if (!isOpen()) { throw getClosedConditionException(conn.getState(), "publish:"); } if ("".equals(topic)) { throw new TTransportException("Subject cannot be empty."); } if (payload.length > NATS_MAX_MESSAGE_SIZE) { throw new TTransportException(TTransportExceptionType.REQUEST_TOO_LARGE, String.format("Message exceeds %d bytes, was %d bytes", NATS_MAX_MESSAGE_SIZE, payload.length)); } try { conn.publish(getFormattedSubject(topic), payload); } catch (IOException e) { throw new TTransportException("publish: unable to publish data: " + e.getMessage()); } }