/* Copyright (c) 2011 Danish Maritime Authority. * * 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 dk.dma.ais.utils.sender; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import dk.dma.ais.message.AisMessage12; import dk.dma.ais.reader.AisReader; import dk.dma.ais.reader.AisReaders; import dk.dma.ais.reader.SendException; import dk.dma.ais.reader.SendRequest; import dk.dma.ais.sentence.Abk; import java.util.function.Consumer; public final class SrmSend implements Consumer<Abk> { private static final Logger LOG = LoggerFactory.getLogger(SrmSend.class); private Abk abk; private boolean abkReceived; private AisReader aisReader; private SrmSend(String hostPort) { aisReader = AisReaders.createReader(hostPort); // Start reader thread aisReader.start(); } /** * Receive the ABK result */ public void accept(Abk abk) { synchronized (this) { this.abk = abk; this.abkReceived = true; } } private void sendMessage(int destination, String message) { AisMessage12 msg12 = new AisMessage12(); msg12.setDestination(destination); msg12.setMessage(message); LOG.info("msg12: " + msg12); // Make send request SendRequest sendRequest = new SendRequest(msg12, 1, destination); // Wait for connected while (aisReader.getStatus() == AisReader.Status.DISCONNECTED) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } LOG.info("Send request"); try { aisReader.send(sendRequest, this); } catch (SendException e) { e.printStackTrace(); } LOG.info("Busy wait for result"); while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (this) { if (abkReceived) { break; } } } LOG.info("ABK received: " + abk); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { if (args.length < 3) { usage(); System.exit(1); } String hostPort = args[0]; int destination = Integer.parseInt(args[1]); String message = args[2]; SrmSend srmSend = new SrmSend(hostPort); srmSend.sendMessage(destination, message); System.exit(0); } public static void usage() { System.out.println("Usage: SrmSend <host:port> <destination> <message>"); } }