Package logic

Source Code of logic.UdpParser

/*
* UdpParser.java
*
* Created on November 12, 2007, 9:39 AM
*
*
*/
package logic;

import messages.PlaneDataObject;

/**
* UDP Parser, der X-Plane-UDP-Daten für die interne Verwendung transformiert.
* @author David Merz
*/
public class UdpParser {

    /**
     * Generiert eine neue Instanz des UDP-Parser
     */
    public UdpParser() {
    }

    /**
     * Transformiert UDP-Daten in ein PlaneDataObject.
     * Die Methode liest nur Breiten- und Laengengrade sowie Hoehe über Meer aus (ID 18).
     * Andere Byte-Packets werden verworfen. Falls kein Paket mit ID 18 existiert, wird <code>null</code> zurückgegeben.
     * @param  buffer Byte-Array; UDP input von XPlane.
     * @param  ip Die IP des Senders. Wird für dne Namen des PlaneDataObjects verwendet.
     * @return PlaneDataObject oder null.
     */
    public final PlaneDataObject getPlaneData(final byte[] buffer, final String ip) {
        //Checks for DataObject No. 18 from XPlane, rest is discarded. If no Object 18 exists, return is null
        if ((buffer != null & ip != null)) {
            int currentIndex = 5;
            while (currentIndex + 4 < buffer.length) {
                int indexNum = 0;
                for (int i = currentIndex; i < currentIndex + 4; i++) {
                    indexNum <<= 8;
                    indexNum += new Byte(buffer[i]).intValue();
                }
                if (indexNum == 18 && currentIndex + 16 < buffer.length) {
                    return new PlaneDataObject(ip,"xplane8",
                            this.getData(buffer, currentIndex + 4),
                            this.getData(buffer, currentIndex + 8),
                            this.getData(buffer, currentIndex + 12),0,0);
                } else if (currentIndex + 36 < buffer.length) {
                    currentIndex += 36;
                } else {
                    return null;
                }
            }
        }
        return null;
    }

    /**
     * Wandelt Bytestrings in Float-Werte um.
     * @param buffer    Der Bytearray, aus dem der Float ausgelesen wird.
     * @param start     Start-Index, ab welchem gelesen wird
     * @return          Rückgabe: Float-Wert aus dem Bytestring.
     */
    private float getData(final byte[] buffer, final int start) {
        return java.nio.ByteBuffer.wrap(buffer).getFloat(start);
    }
}
TOP

Related Classes of logic.UdpParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.