mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-20 19:42:45 +00:00
99 lines
4.6 KiB
Java
99 lines
4.6 KiB
Java
package com.limelight.utils;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Intent;
|
|
import android.widget.Toast;
|
|
|
|
import com.limelight.Game;
|
|
import com.limelight.R;
|
|
import com.limelight.binding.PlatformBinding;
|
|
import com.limelight.computers.ComputerManagerService;
|
|
import com.limelight.nvstream.http.ComputerDetails;
|
|
import com.limelight.nvstream.http.GfeHttpResponseException;
|
|
import com.limelight.nvstream.http.NvApp;
|
|
import com.limelight.nvstream.http.NvHTTP;
|
|
|
|
import java.io.FileNotFoundException;
|
|
import java.net.UnknownHostException;
|
|
|
|
public class ServerHelper {
|
|
public static String getCurrentAddressFromComputer(ComputerDetails computer) {
|
|
return computer.activeAddress;
|
|
}
|
|
|
|
public static Intent createStartIntent(Activity parent, NvApp app, ComputerDetails computer,
|
|
ComputerManagerService.ComputerManagerBinder managerBinder) {
|
|
Intent intent = new Intent(parent, Game.class);
|
|
intent.putExtra(Game.EXTRA_HOST, getCurrentAddressFromComputer(computer));
|
|
intent.putExtra(Game.EXTRA_APP_NAME, app.getAppName());
|
|
intent.putExtra(Game.EXTRA_APP_ID, app.getAppId());
|
|
intent.putExtra(Game.EXTRA_APP_HDR, app.isHdrSupported());
|
|
intent.putExtra(Game.EXTRA_UNIQUEID, managerBinder.getUniqueId());
|
|
intent.putExtra(Game.EXTRA_STREAMING_REMOTE, getCurrentAddressFromComputer(computer).equals(computer.remoteAddress));
|
|
intent.putExtra(Game.EXTRA_PC_UUID, computer.uuid.toString());
|
|
intent.putExtra(Game.EXTRA_PC_NAME, computer.name);
|
|
return intent;
|
|
}
|
|
|
|
public static void doStart(Activity parent, NvApp app, ComputerDetails computer,
|
|
ComputerManagerService.ComputerManagerBinder managerBinder) {
|
|
if (computer.state == ComputerDetails.State.OFFLINE ||
|
|
ServerHelper.getCurrentAddressFromComputer(computer) == null) {
|
|
Toast.makeText(parent, parent.getResources().getString(R.string.pair_pc_offline), Toast.LENGTH_SHORT).show();
|
|
return;
|
|
}
|
|
parent.startActivity(createStartIntent(parent, app, computer, managerBinder));
|
|
}
|
|
|
|
public static void doQuit(final Activity parent,
|
|
final String address,
|
|
final NvApp app,
|
|
final ComputerManagerService.ComputerManagerBinder managerBinder,
|
|
final Runnable onComplete) {
|
|
Toast.makeText(parent, parent.getResources().getString(R.string.applist_quit_app) + " " + app.getAppName() + "...", Toast.LENGTH_SHORT).show();
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
NvHTTP httpConn;
|
|
String message;
|
|
try {
|
|
httpConn = new NvHTTP(address,
|
|
managerBinder.getUniqueId(), null, PlatformBinding.getCryptoProvider(parent));
|
|
if (httpConn.quitApp()) {
|
|
message = parent.getResources().getString(R.string.applist_quit_success) + " " + app.getAppName();
|
|
} else {
|
|
message = parent.getResources().getString(R.string.applist_quit_fail) + " " + app.getAppName();
|
|
}
|
|
} catch (GfeHttpResponseException e) {
|
|
if (e.getErrorCode() == 599) {
|
|
message = "This session wasn't started by this device," +
|
|
" so it cannot be quit. End streaming on the original " +
|
|
"device or the PC itself. (Error code: "+e.getErrorCode()+")";
|
|
}
|
|
else {
|
|
message = e.getMessage();
|
|
}
|
|
} catch (UnknownHostException e) {
|
|
message = parent.getResources().getString(R.string.error_unknown_host);
|
|
} catch (FileNotFoundException e) {
|
|
message = parent.getResources().getString(R.string.error_404);
|
|
} catch (Exception e) {
|
|
message = e.getMessage();
|
|
} finally {
|
|
if (onComplete != null) {
|
|
onComplete.run();
|
|
}
|
|
}
|
|
|
|
final String toastMessage = message;
|
|
parent.runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
Toast.makeText(parent, toastMessage, Toast.LENGTH_LONG).show();
|
|
}
|
|
});
|
|
}
|
|
}).start();
|
|
}
|
|
}
|