diff --git a/app/src/main/java/com/limelight/utils/ServerHelper.java b/app/src/main/java/com/limelight/utils/ServerHelper.java new file mode 100644 index 00000000..7e0d2575 --- /dev/null +++ b/app/src/main/java/com/limelight/utils/ServerHelper.java @@ -0,0 +1,90 @@ +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.InetAddress; +import java.net.UnknownHostException; + +public class ServerHelper { + public static InetAddress getCurrentAddressFromComputer(ComputerDetails computer) { + return computer.reachability == ComputerDetails.Reachability.LOCAL ? + computer.localIp : computer.remoteIp; + } + + public static void doStart(Activity parent, NvApp app, ComputerDetails computer, + ComputerManagerService.ComputerManagerBinder managerBinder) { + Intent intent = new Intent(parent, Game.class); + intent.putExtra(Game.EXTRA_HOST, + computer.reachability == ComputerDetails.Reachability.LOCAL ? + computer.localIp.getHostAddress() : computer.remoteIp.getHostAddress()); + intent.putExtra(Game.EXTRA_APP_NAME, app.getAppName()); + intent.putExtra(Game.EXTRA_APP_ID, app.getAppId()); + intent.putExtra(Game.EXTRA_UNIQUEID, managerBinder.getUniqueId()); + intent.putExtra(Game.EXTRA_STREAMING_REMOTE, + computer.reachability != ComputerDetails.Reachability.LOCAL); + parent.startActivity(intent); + } + + public static void doQuit(final Activity parent, + final InetAddress 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(); + } +}