mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-19 11:03:01 +00:00
Plumb common->JNI functions
This commit is contained in:
parent
a3d5e955aa
commit
c62986e7b1
@ -7,32 +7,15 @@ import javax.crypto.SecretKey;
|
||||
import com.limelight.nvstream.av.video.VideoDecoderRenderer;
|
||||
|
||||
public class ConnectionContext {
|
||||
// Gen 3 servers are 2.1.1 - 2.2.1
|
||||
public static final int SERVER_GENERATION_3 = 3;
|
||||
|
||||
// Gen 4 servers are 2.2.2+
|
||||
public static final int SERVER_GENERATION_4 = 4;
|
||||
|
||||
// Gen 5 servers are 2.10.2+
|
||||
public static final int SERVER_GENERATION_5 = 5;
|
||||
|
||||
// Gen 6 servers haven't been seen in the wild
|
||||
public static final int SERVER_GENERATION_6 = 6;
|
||||
|
||||
// Gen 7 servers are GFE 2.11.2.46+
|
||||
public static final int SERVER_GENERATION_7 = 7;
|
||||
|
||||
public InetAddress serverAddress;
|
||||
public StreamConfiguration streamConfig;
|
||||
public VideoDecoderRenderer videoDecoderRenderer;
|
||||
public NvConnectionListener connListener;
|
||||
public SecretKey riKey;
|
||||
public int riKeyId;
|
||||
|
||||
public int serverGeneration;
|
||||
|
||||
// This is the version quad from the appversion tag of /serverinfo
|
||||
public int[] serverAppVersion;
|
||||
public String serverAppVersion;
|
||||
public String serverGfeVersion;
|
||||
|
||||
public int negotiatedVideoFormat;
|
||||
public int negotiatedWidth, negotiatedHeight;
|
||||
|
@ -19,6 +19,8 @@ import com.limelight.nvstream.http.LimelightCryptoProvider;
|
||||
import com.limelight.nvstream.http.NvApp;
|
||||
import com.limelight.nvstream.http.NvHTTP;
|
||||
import com.limelight.nvstream.http.PairingManager;
|
||||
import com.limelight.nvstream.input.MouseButtonPacket;
|
||||
import com.limelight.nvstream.jni.MoonBridge;
|
||||
|
||||
public class NvConnection {
|
||||
// Context parameters
|
||||
@ -27,14 +29,13 @@ public class NvConnection {
|
||||
private String uniqueId;
|
||||
private ConnectionContext context;
|
||||
|
||||
public NvConnection(String host, String uniqueId, NvConnectionListener listener, StreamConfiguration config, LimelightCryptoProvider cryptoProvider)
|
||||
public NvConnection(String host, String uniqueId, StreamConfiguration config, LimelightCryptoProvider cryptoProvider)
|
||||
{
|
||||
this.host = host;
|
||||
this.cryptoProvider = cryptoProvider;
|
||||
this.uniqueId = uniqueId;
|
||||
|
||||
this.context = new ConnectionContext();
|
||||
this.context.connListener = listener;
|
||||
this.context.streamConfig = config;
|
||||
try {
|
||||
// This is unique per connection
|
||||
@ -62,9 +63,9 @@ public class NvConnection {
|
||||
return new SecureRandom().nextInt();
|
||||
}
|
||||
|
||||
public void stop()
|
||||
{
|
||||
|
||||
public void stop() {
|
||||
MoonBridge.stopConnection();
|
||||
MoonBridge.cleanupBridge();
|
||||
}
|
||||
|
||||
private boolean startApp() throws XmlPullParserException, IOException
|
||||
@ -73,47 +74,17 @@ public class NvConnection {
|
||||
|
||||
String serverInfo = h.getServerInfo();
|
||||
|
||||
context.serverAppVersion = h.getServerAppVersionQuad(serverInfo);
|
||||
context.serverAppVersion = h.getServerVersion(serverInfo);
|
||||
if (context.serverAppVersion == null) {
|
||||
context.connListener.displayMessage("Server version malformed");
|
||||
return false;
|
||||
}
|
||||
|
||||
int majorVersion = context.serverAppVersion[0];
|
||||
LimeLog.info("Server major version: "+majorVersion);
|
||||
|
||||
if (majorVersion == 0) {
|
||||
context.connListener.displayMessage("Server version malformed");
|
||||
context.serverGfeVersion = h.getGfeVersion(serverInfo);
|
||||
if (context.serverGfeVersion == null) {
|
||||
context.connListener.displayMessage("Server GFE version malformed");
|
||||
return false;
|
||||
}
|
||||
else if (majorVersion < 3) {
|
||||
// Even though we support major version 3 (2.1.x), GFE 2.2.2 is preferred.
|
||||
context.connListener.displayMessage("This app requires GeForce Experience 2.2.2 or later. Please upgrade GFE on your PC and try again.");
|
||||
return false;
|
||||
}
|
||||
else if (majorVersion > 7) {
|
||||
// Warn the user but allow them to continue
|
||||
context.connListener.displayTransientMessage("This version of GFE is not currently supported. You may experience issues until this app is updated.");
|
||||
}
|
||||
|
||||
switch (majorVersion) {
|
||||
case 3:
|
||||
context.serverGeneration = ConnectionContext.SERVER_GENERATION_3;
|
||||
break;
|
||||
case 4:
|
||||
context.serverGeneration = ConnectionContext.SERVER_GENERATION_4;
|
||||
break;
|
||||
case 5:
|
||||
context.serverGeneration = ConnectionContext.SERVER_GENERATION_5;
|
||||
break;
|
||||
case 6:
|
||||
context.serverGeneration = ConnectionContext.SERVER_GENERATION_6;
|
||||
break;
|
||||
case 7:
|
||||
default:
|
||||
context.serverGeneration = ConnectionContext.SERVER_GENERATION_7;
|
||||
break;
|
||||
}
|
||||
|
||||
if (h.getPairState(serverInfo) != PairingManager.PairState.PAIRED) {
|
||||
context.connListener.displayMessage("Device not paired with computer");
|
||||
@ -251,12 +222,14 @@ public class NvConnection {
|
||||
context.connListener.stageFailed(appName, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
MoonBridge.startConnection(context.serverAddress.getHostAddress(),
|
||||
context.serverAppVersion, context.serverGfeVersion);
|
||||
}
|
||||
|
||||
public void start(AudioRenderer audioRenderer, VideoDecoderRenderer videoDecoderRenderer)
|
||||
public void start(AudioRenderer audioRenderer, VideoDecoderRenderer videoDecoderRenderer, NvConnectionListener connectionListener)
|
||||
{
|
||||
this.context.videoDecoderRenderer = videoDecoderRenderer;
|
||||
|
||||
MoonBridge.setupBridge(videoDecoderRenderer, audioRenderer, connectionListener);
|
||||
new Thread(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
@ -273,17 +246,17 @@ public class NvConnection {
|
||||
|
||||
public void sendMouseMove(final short deltaX, final short deltaY)
|
||||
{
|
||||
|
||||
MoonBridge.sendMouseMove(deltaX, deltaY);
|
||||
}
|
||||
|
||||
public void sendMouseButtonDown(final byte mouseButton)
|
||||
{
|
||||
|
||||
MoonBridge.sendMouseButton(MouseButtonPacket.PRESS_EVENT, mouseButton);
|
||||
}
|
||||
|
||||
public void sendMouseButtonUp(final byte mouseButton)
|
||||
{
|
||||
|
||||
MoonBridge.sendMouseButton(MouseButtonPacket.RELEASE_EVENT, mouseButton);
|
||||
}
|
||||
|
||||
public void sendControllerInput(final short controllerNumber,
|
||||
@ -292,7 +265,7 @@ public class NvConnection {
|
||||
final short leftStickX, final short leftStickY,
|
||||
final short rightStickX, final short rightStickY)
|
||||
{
|
||||
|
||||
MoonBridge.sendMultiControllerInput(controllerNumber, activeGamepadMask, buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY);
|
||||
}
|
||||
|
||||
public void sendControllerInput(final short buttonFlags,
|
||||
@ -300,15 +273,15 @@ public class NvConnection {
|
||||
final short leftStickX, final short leftStickY,
|
||||
final short rightStickX, final short rightStickY)
|
||||
{
|
||||
|
||||
MoonBridge.sendControllerInput(buttonFlags, leftTrigger, rightTrigger, leftStickX, leftStickY, rightStickX, rightStickY);
|
||||
}
|
||||
|
||||
public void sendKeyboardInput(final short keyMap, final byte keyDirection, final byte modifier) {
|
||||
|
||||
MoonBridge.sendKeyboardInput(keyMap, keyDirection, modifier);
|
||||
}
|
||||
|
||||
public void sendMouseScroll(final byte scrollClicks) {
|
||||
|
||||
MoonBridge.sendMouseScroll(scrollClicks);
|
||||
}
|
||||
|
||||
public int getActiveVideoFormat() {
|
||||
|
@ -378,6 +378,10 @@ public class NvHTTP {
|
||||
return getXmlString(serverInfo, "gputype");
|
||||
}
|
||||
|
||||
public String getGfeVersion(String serverInfo) throws XmlPullParserException, IOException {
|
||||
return getXmlString(serverInfo, "GfeVersion");
|
||||
}
|
||||
|
||||
public boolean supports4K(String serverInfo) throws XmlPullParserException, IOException {
|
||||
// serverinfo returns supported resolutions in descending order, so getting the first
|
||||
// height will give us whether we support 4K. If this is not present, we don't support
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.limelight.nvstream.input;
|
||||
|
||||
public class MouseButtonPacket {
|
||||
private static final byte PRESS_EVENT = 0x07;
|
||||
private static final byte RELEASE_EVENT = 0x08;
|
||||
public static final byte PRESS_EVENT = 0x07;
|
||||
public static final byte RELEASE_EVENT = 0x08;
|
||||
|
||||
public static final byte BUTTON_LEFT = 0x01;
|
||||
public static final byte BUTTON_MIDDLE = 0x02;
|
||||
|
@ -106,5 +106,40 @@ public class MoonBridge {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setupBridge(VideoDecoderRenderer videoRenderer, AudioRenderer audioRenderer, NvConnectionListener connectionListener) {
|
||||
MoonBridge.videoRenderer = videoRenderer;
|
||||
MoonBridge.audioRenderer = audioRenderer;
|
||||
MoonBridge.connectionListener = connectionListener;
|
||||
}
|
||||
|
||||
public static void cleanupBridge() {
|
||||
MoonBridge.videoRenderer = null;
|
||||
MoonBridge.audioRenderer = null;
|
||||
MoonBridge.connectionListener = null;
|
||||
}
|
||||
|
||||
public static native void startConnection(String address, String serverInfoAppVersion, String serverInfoGfeVersion);
|
||||
|
||||
public static native void stopConnection();
|
||||
|
||||
public static native void sendMouseMove(short deltaX, short deltaY);
|
||||
|
||||
public static native void sendMouseButton(byte buttonEvent, byte mouseButton);
|
||||
|
||||
public static native void sendMultiControllerInput(short controllerNumber,
|
||||
short activeGamepadMask, short buttonFlags,
|
||||
byte leftTrigger, byte rightTrigger,
|
||||
short leftStickX, short leftStickY,
|
||||
short rightStickX, short rightStickY);
|
||||
|
||||
public static native void sendControllerInput(short buttonFlags,
|
||||
byte leftTrigger, byte rightTrigger,
|
||||
short leftStickX, short leftStickY,
|
||||
short rightStickX, short rightStickY);
|
||||
|
||||
public static native void sendKeyboardInput(short keyMap, byte keyDirection, byte modifier);
|
||||
|
||||
public static native void sendMouseScroll(byte scrollClicks);
|
||||
|
||||
public static native String getStageName(int stage);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user