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 Intent createStartIntent(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); 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) { parent.startActivity(createStartIntent(parent, app, computer, managerBinder)); } 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(); } }