mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-04-16 21:40:23 +00:00
Create a proper class hierarchy for the input packets. Implement MouseButton and MouseMove packets. Fix DNS resolution bug in NvConnection. Mouse move events are working.
This commit is contained in:
@@ -40,7 +40,7 @@ public class NvConnection {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
host = InetAddress.getByName(host).toString().substring(1);
|
||||
host = InetAddress.getByName(host).getHostAddress();
|
||||
} catch (UnknownHostException e) {
|
||||
e.printStackTrace();
|
||||
displayToast(e.getMessage());
|
||||
@@ -70,6 +70,60 @@ public class NvConnection {
|
||||
new NvVideoStream().startVideoStream(host, surface);
|
||||
}
|
||||
|
||||
public void sendMouseMove(final short deltaX, final short deltaY)
|
||||
{
|
||||
if (inputStream == null)
|
||||
return;
|
||||
|
||||
threadPool.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
inputStream.sendMouseMove(deltaX, deltaY);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
displayToast(e.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void sendMouseButtonDown()
|
||||
{
|
||||
if (inputStream == null)
|
||||
return;
|
||||
|
||||
threadPool.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
inputStream.sendMouseButtonDown();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
displayToast(e.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void sendMouseButtonUp()
|
||||
{
|
||||
if (inputStream == null)
|
||||
return;
|
||||
|
||||
threadPool.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
inputStream.sendMouseButtonUp();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
displayToast(e.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void sendControllerInput(final short buttonFlags,
|
||||
final byte leftTrigger, final byte rightTrigger,
|
||||
final short leftStickX, final short leftStickY,
|
||||
|
||||
@@ -22,9 +22,27 @@ public class NvController {
|
||||
public void sendControllerInput(short buttonFlags, byte leftTrigger, byte rightTrigger,
|
||||
short leftStickX, short leftStickY, short rightStickX, short rightStickY) throws IOException
|
||||
{
|
||||
out.write(new NvInputPacket(buttonFlags, leftTrigger,
|
||||
out.write(new NvControllerPacket(buttonFlags, leftTrigger,
|
||||
rightTrigger, leftStickX, leftStickY,
|
||||
rightStickX, rightStickY).toWire());
|
||||
out.flush();
|
||||
}
|
||||
|
||||
public void sendMouseButtonDown() throws IOException
|
||||
{
|
||||
out.write(new NvMouseButtonPacket(true).toWire());
|
||||
out.flush();
|
||||
}
|
||||
|
||||
public void sendMouseButtonUp() throws IOException
|
||||
{
|
||||
out.write(new NvMouseButtonPacket(false).toWire());
|
||||
out.flush();
|
||||
}
|
||||
|
||||
public void sendMouseMove(short deltaX, short deltaY) throws IOException
|
||||
{
|
||||
out.write(new NvMouseMovePacket(deltaX, deltaY).toWire());
|
||||
out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
88
src/com/limelight/nvstream/input/NvControllerPacket.java
Normal file
88
src/com/limelight/nvstream/input/NvControllerPacket.java
Normal file
@@ -0,0 +1,88 @@
|
||||
package com.limelight.nvstream.input;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
public class NvControllerPacket extends NvInputPacket {
|
||||
public static final byte[] HEADER =
|
||||
{
|
||||
0x0A,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x14
|
||||
};
|
||||
|
||||
public static final byte[] TAIL =
|
||||
{
|
||||
(byte)0x9C,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x55,
|
||||
0x00
|
||||
};
|
||||
|
||||
public static final int PACKET_TYPE = 0x18;
|
||||
|
||||
public static final short A_FLAG = 0x1000;
|
||||
public static final short B_FLAG = 0x2000;
|
||||
public static final short X_FLAG = 0x4000;
|
||||
public static final short Y_FLAG = (short)0x8000;
|
||||
public static final short UP_FLAG = 0x0001;
|
||||
public static final short DOWN_FLAG = 0x0002;
|
||||
public static final short LEFT_FLAG = 0x0004;
|
||||
public static final short RIGHT_FLAG = 0x0008;
|
||||
public static final short LB_FLAG = 0x0100;
|
||||
public static final short RB_FLAG = 0x0200;
|
||||
public static final short PLAY_FLAG = 0x0010;
|
||||
public static final short BACK_FLAG = 0x0020;
|
||||
public static final short LS_CLK_FLAG = 0x0040;
|
||||
public static final short RS_CLK_FLAG = 0x0080;
|
||||
|
||||
public static final short PAYLOAD_LENGTH = 24;
|
||||
public static final short PACKET_LENGTH = PAYLOAD_LENGTH +
|
||||
NvInputPacket.HEADER_LENGTH;
|
||||
|
||||
private short buttonFlags;
|
||||
private byte leftTrigger;
|
||||
private byte rightTrigger;
|
||||
private short leftStickX;
|
||||
private short leftStickY;
|
||||
private short rightStickX;
|
||||
private short rightStickY;
|
||||
|
||||
public NvControllerPacket(short buttonFlags, byte leftTrigger, byte rightTrigger,
|
||||
short leftStickX, short leftStickY,
|
||||
short rightStickX, short rightStickY)
|
||||
{
|
||||
super(PACKET_TYPE);
|
||||
|
||||
this.buttonFlags = buttonFlags;
|
||||
this.leftTrigger = leftTrigger;
|
||||
this.rightTrigger = rightTrigger;
|
||||
this.leftStickX = leftStickX;
|
||||
this.leftStickY = leftStickY;
|
||||
this.rightStickX = rightStickX;
|
||||
this.rightStickY = rightStickY;
|
||||
}
|
||||
|
||||
public byte[] toWire()
|
||||
{
|
||||
ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
bb.put(toWireHeader());
|
||||
bb.put(HEADER);
|
||||
bb.putShort(buttonFlags);
|
||||
bb.put(leftTrigger);
|
||||
bb.put(rightTrigger);
|
||||
bb.putShort(leftStickX);
|
||||
bb.putShort(leftStickY);
|
||||
bb.putShort(rightStickX);
|
||||
bb.putShort(rightStickY);
|
||||
bb.put(TAIL);
|
||||
|
||||
return bb.array();
|
||||
}
|
||||
}
|
||||
@@ -3,83 +3,24 @@ package com.limelight.nvstream.input;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
public class NvInputPacket {
|
||||
public static final byte[] HEADER =
|
||||
{
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x18,
|
||||
0x0A,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x14
|
||||
};
|
||||
public abstract class NvInputPacket {
|
||||
public static final int HEADER_LENGTH = 0x4;
|
||||
|
||||
protected int packetType;
|
||||
|
||||
public NvInputPacket(int packetType)
|
||||
{
|
||||
this.packetType = packetType;
|
||||
}
|
||||
|
||||
public abstract byte[] toWire();
|
||||
|
||||
public byte[] toWireHeader()
|
||||
{
|
||||
ByteBuffer bb = ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN);
|
||||
|
||||
public static final byte[] TAIL =
|
||||
{
|
||||
(byte)0x9C,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x55,
|
||||
0x00
|
||||
};
|
||||
bb.putInt(packetType);
|
||||
|
||||
public static final short A_FLAG = 0x1000;
|
||||
public static final short B_FLAG = 0x2000;
|
||||
public static final short X_FLAG = 0x4000;
|
||||
public static final short Y_FLAG = (short)0x8000;
|
||||
public static final short UP_FLAG = 0x0001;
|
||||
public static final short DOWN_FLAG = 0x0002;
|
||||
public static final short LEFT_FLAG = 0x0004;
|
||||
public static final short RIGHT_FLAG = 0x0008;
|
||||
public static final short LB_FLAG = 0x0100;
|
||||
public static final short RB_FLAG = 0x0200;
|
||||
public static final short PLAY_FLAG = 0x0010;
|
||||
public static final short BACK_FLAG = 0x0020;
|
||||
public static final short LS_CLK_FLAG = 0x0040;
|
||||
public static final short RS_CLK_FLAG = 0x0080;
|
||||
|
||||
public static final short PACKET_LENGTH = 28;
|
||||
|
||||
private short buttonFlags;
|
||||
private byte leftTrigger;
|
||||
private byte rightTrigger;
|
||||
private short leftStickX;
|
||||
private short leftStickY;
|
||||
private short rightStickX;
|
||||
private short rightStickY;
|
||||
|
||||
public NvInputPacket(short buttonFlags, byte leftTrigger, byte rightTrigger,
|
||||
short leftStickX, short leftStickY,
|
||||
short rightStickX, short rightStickY)
|
||||
{
|
||||
this.buttonFlags = buttonFlags;
|
||||
this.leftTrigger = leftTrigger;
|
||||
this.rightTrigger = rightTrigger;
|
||||
this.leftStickX = leftStickX;
|
||||
this.leftStickY = leftStickY;
|
||||
this.rightStickX = rightStickX;
|
||||
this.rightStickY = rightStickY;
|
||||
}
|
||||
|
||||
public byte[] toWire()
|
||||
{
|
||||
ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
bb.put(HEADER);
|
||||
bb.putShort(buttonFlags);
|
||||
bb.put(leftTrigger);
|
||||
bb.put(rightTrigger);
|
||||
bb.putShort(leftStickX);
|
||||
bb.putShort(leftStickY);
|
||||
bb.putShort(rightStickX);
|
||||
bb.putShort(rightStickY);
|
||||
bb.put(TAIL);
|
||||
|
||||
return bb.array();
|
||||
}
|
||||
}
|
||||
return bb.array();
|
||||
}
|
||||
}
|
||||
|
||||
36
src/com/limelight/nvstream/input/NvMouseButtonPacket.java
Normal file
36
src/com/limelight/nvstream/input/NvMouseButtonPacket.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package com.limelight.nvstream.input;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
public class NvMouseButtonPacket extends NvInputPacket {
|
||||
|
||||
private byte buttonEventType;
|
||||
|
||||
public static final int PACKET_TYPE = 0x5;
|
||||
public static final int PAYLOAD_LENGTH = 5;
|
||||
public static final int PACKET_LENGTH = PAYLOAD_LENGTH +
|
||||
NvInputPacket.HEADER_LENGTH;
|
||||
|
||||
public static final byte PRESS_EVENT = 0x07;
|
||||
public static final byte RELEASE_EVENT = 0x08;
|
||||
|
||||
public NvMouseButtonPacket(boolean leftButtonDown)
|
||||
{
|
||||
super(PACKET_TYPE);
|
||||
|
||||
buttonEventType = leftButtonDown ?
|
||||
PRESS_EVENT : RELEASE_EVENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] toWire() {
|
||||
ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH).order(ByteOrder.BIG_ENDIAN);
|
||||
|
||||
bb.put(toWireHeader());
|
||||
bb.put(buttonEventType);
|
||||
bb.putInt(1); // FIXME: button index?
|
||||
|
||||
return bb.array();
|
||||
}
|
||||
}
|
||||
42
src/com/limelight/nvstream/input/NvMouseMovePacket.java
Normal file
42
src/com/limelight/nvstream/input/NvMouseMovePacket.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package com.limelight.nvstream.input;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public class NvMouseMovePacket extends NvInputPacket {
|
||||
|
||||
private static final byte[] HEADER =
|
||||
{
|
||||
0x06,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00
|
||||
};
|
||||
|
||||
public static final int PACKET_TYPE = 0x8;
|
||||
public static final int PAYLOAD_LENGTH = 8;
|
||||
public static final int PACKET_LENGTH = PAYLOAD_LENGTH +
|
||||
NvInputPacket.HEADER_LENGTH;
|
||||
|
||||
private short deltaX;
|
||||
private short deltaY;
|
||||
|
||||
public NvMouseMovePacket(short deltaX, short deltaY)
|
||||
{
|
||||
super(PACKET_TYPE);
|
||||
|
||||
this.deltaX = deltaX;
|
||||
this.deltaY = deltaY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] toWire() {
|
||||
ByteBuffer bb = ByteBuffer.allocate(PACKET_LENGTH);
|
||||
|
||||
bb.put(toWireHeader());
|
||||
bb.put(HEADER);
|
||||
bb.putShort(deltaX);
|
||||
bb.putShort(deltaY);
|
||||
|
||||
return bb.array();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user