 1Content-type: application/x-Unknown; charset=UTF8package nmc.platform;

import java.io.IOException;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.InetAddress;

public class DatagramIoPort {
    private int dgmDataSize = 1024;
    public void changeRcvBufferSize(int newSize) {dgmDataSize = newSize; }
    public int getRcvBufferDfltSize() { return dgmDataSize; }
    private DatagramSocket dgmSock;
    private InetAddress inetAddr;
    private int portNumber; // can be either rx or tx
    private String ipAddr; // if nonnull, this is a tx-only port
                           // if null, this is an rx-only port
    static public DatagramIoPort GetRcvPort(int rxPortNumber) throws IOException {
        return new DatagramIoPort(rxPortNumber);
    }
    private DatagramIoPort(int rxPortNumber) throws IOException {
        this.portNumber = rxPortNumber;
        this.dgmSock = new DatagramSocket(rxPortNumber);
    }
    private DatagramIoPort(String destIpAddr, int destPortNumber) 
              throws IOException {
        this.portNumber = destPortNumber;
        this.ipAddr = destIpAddr;
        this.inetAddr = InetAddress.getByName(ipAddr);
        this.dgmSock = new DatagramSocket();
    }
    static public DatagramIoPort GetTxPort(String destIpAddr, int destPortNumber) 
             throws IOException {
        return new DatagramIoPort(destIpAddr, destPortNumber);
    }
        	

    public byte[] blockingRx() throws IOException {
        byte[] payloadBuffer = new byte[dgmDataSize];
        DatagramPacket incoming = new DatagramPacket(payloadBuffer, 
                                                     payloadBuffer.length);
        dgmSock.receive(incoming);
        byte[] payloadActual = incoming.getData();
        return payloadActual;
    }
    public void send(byte[] payload) throws IOException {
    	DatagramPacket outgoing= new DatagramPacket(payload,
    	payload.length,
    	inetAddr,
    	portNumber);
    	
    	dgmSock.send(outgoing);
    }
}
