Changed behavior of sockets so that the plugin will correctly recognized different clients.
This commit is contained in:
@@ -18,7 +18,9 @@ import java.util.Arrays;
|
|||||||
*/
|
*/
|
||||||
public class XPlaneConnect implements AutoCloseable
|
public class XPlaneConnect implements AutoCloseable
|
||||||
{
|
{
|
||||||
private DatagramSocket socket;
|
private static int clientNum;
|
||||||
|
private DatagramSocket outSocket;
|
||||||
|
private DatagramSocket inSocket;
|
||||||
private InetAddress xplaneAddr;
|
private InetAddress xplaneAddr;
|
||||||
private int xplanePort;
|
private int xplanePort;
|
||||||
|
|
||||||
@@ -27,7 +29,7 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
*
|
*
|
||||||
* @return The incoming port number.
|
* @return The incoming port number.
|
||||||
*/
|
*/
|
||||||
public int getRecvPort() { return socket.getLocalPort(); }
|
public int getRecvPort() { return inSocket.getLocalPort(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the port on which the client sends data to X-Plane.
|
* Gets the port on which the client sends data to X-Plane.
|
||||||
@@ -89,10 +91,11 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
*/
|
*/
|
||||||
public XPlaneConnect(int timeout) throws SocketException
|
public XPlaneConnect(int timeout) throws SocketException
|
||||||
{
|
{
|
||||||
this.socket = new DatagramSocket(49008);
|
this.inSocket = new DatagramSocket(49008);
|
||||||
|
this.outSocket = new DatagramSocket(50000 + ++clientNum);
|
||||||
this.xplaneAddr = InetAddress.getLoopbackAddress();
|
this.xplaneAddr = InetAddress.getLoopbackAddress();
|
||||||
this.xplanePort = 49009;
|
this.xplanePort = 49009;
|
||||||
this.socket.setSoTimeout(timeout);
|
this.inSocket.setSoTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -123,21 +126,27 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
public XPlaneConnect(int port, String xplaneHost, int xplanePort, int timeout)
|
public XPlaneConnect(int port, String xplaneHost, int xplanePort, int timeout)
|
||||||
throws java.net.SocketException, java.net.UnknownHostException
|
throws java.net.SocketException, java.net.UnknownHostException
|
||||||
{
|
{
|
||||||
this.socket = new DatagramSocket(port);
|
this.inSocket = new DatagramSocket(port);
|
||||||
|
this.outSocket = new DatagramSocket(50000 + ++clientNum);
|
||||||
this.xplaneAddr = InetAddress.getByName(xplaneHost);
|
this.xplaneAddr = InetAddress.getByName(xplaneHost);
|
||||||
this.xplanePort = xplanePort;
|
this.xplanePort = xplanePort;
|
||||||
this.socket.setSoTimeout(timeout);
|
this.inSocket.setSoTimeout(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes the underlying socket.
|
* Closes the underlying inSocket.
|
||||||
*/
|
*/
|
||||||
public void close()
|
public void close()
|
||||||
{
|
{
|
||||||
if(socket != null)
|
if(inSocket != null)
|
||||||
{
|
{
|
||||||
socket.close();
|
inSocket.close();
|
||||||
socket = null;
|
inSocket = null;
|
||||||
|
}
|
||||||
|
if(outSocket != null)
|
||||||
|
{
|
||||||
|
outSocket.close();
|
||||||
|
outSocket = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +162,7 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
socket.receive(packet);
|
inSocket.receive(packet);
|
||||||
return Arrays.copyOf(buffer, buffer[4]);
|
return Arrays.copyOf(buffer, buffer[4]);
|
||||||
}
|
}
|
||||||
catch (SocketTimeoutException ex)
|
catch (SocketTimeoutException ex)
|
||||||
@@ -178,7 +187,7 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
buffer[4] = (byte)buffer.length;
|
buffer[4] = (byte)buffer.length;
|
||||||
|
|
||||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, xplaneAddr, xplanePort);
|
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, xplaneAddr, xplanePort);
|
||||||
socket.send(packet);
|
outSocket.send(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -583,9 +592,9 @@ public class XPlaneConnect implements AutoCloseable
|
|||||||
os.write((byte) (recvPort >> 8));
|
os.write((byte) (recvPort >> 8));
|
||||||
sendUDP(os.toByteArray());
|
sendUDP(os.toByteArray());
|
||||||
|
|
||||||
int soTimeout = socket.getSoTimeout();
|
int soTimeout = inSocket.getSoTimeout();
|
||||||
socket.close();
|
inSocket.close();
|
||||||
socket = new DatagramSocket(recvPort);
|
inSocket = new DatagramSocket(recvPort);
|
||||||
socket.setSoTimeout(soTimeout);
|
inSocket.setSoTimeout(soTimeout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user