/**
 * @author cramakrishnan
 *
 * Copyright (C) 2004, C. Ramakrishnan / Illposed Software
 * All rights reserved.
 * 
 * See license.txt (or license.rtf) for license information.
 * 
 * 
 * OSCPortOut is the class that sends OSC messages.
 *
 * To send OSC, in your code you should instantiate and hold onto an OSCPort
 * pointing at the address and port number for the receiver.
 *
 * When you want to send an OSC message, call send().
 *
 * An example based on com.illposed.osc.test.OSCPortTest::testMessageWithArgs() :
        OSCPort sender = new OSCPort();
        Object args[] = new Object[2];
        args[0] = new Integer(3);
        args[1] = "hello";
        OSCMessage msg = new OSCMessage("/sayhello", args);
         try {
            sender.send(msg);
         } catch (Exception e) {
             showError("Couldn't send");
         }
 */

package com.illposed.osc;

import java.net.*;
import java.io.IOException;
import com.illposed.osc.utility.OSCByteArrayToJavaConverter;

public class OSCPortOut extends OSCPort {

    protected InetAddress address;

    /**
     * Create an OSCPort that sends to newAddress, newPort
     * @param newAddress InetAddress
     * @param newPort int
     */
    public OSCPortOut(InetAddress newAddress, int newPort) throws SocketException {
        socket = new DatagramSocket();
        address = newAddress;
        port = newPort;
    }

    /**
     * Create an OSCPort that sends to newAddress, on the standard SuperCollider port
     * @param newAddress InetAddress
     *
     * Default the port to the standard one for SuperCollider
     */
    public OSCPortOut(InetAddress newAddress) throws SocketException {
        this(newAddress, defaultSCOSCPort);
    }

    /**
     * Create an OSCPort that sends to localhost, on the standard SuperCollider port
     * Default the address to localhost
     * Default the port to the standard one for SuperCollider
     */
    public OSCPortOut() throws UnknownHostException, SocketException {
        this(InetAddress.getLocalHost(), defaultSCOSCPort);
    }
    
    /**
     * @param aPacket OSCPacket
     */
    public void send(OSCPacket aPacket) throws IOException {
        byte[] byteArray = aPacket.getByteArray();
        DatagramPacket packet = 
            new DatagramPacket(byteArray, byteArray.length,address,port);
        socket.send(packet);
    }
}
