Fix failure to quit games on GFE 3.10

This commit is contained in:
Cameron Gutman 2017-10-16 23:46:29 -07:00
parent a53444148e
commit 66536aa755

View File

@ -433,7 +433,7 @@ public class NvHTTP {
// has the semantics that its name would indicate. To contain the effects of this change as much // has the semantics that its name would indicate. To contain the effects of this change as much
// as possible, we'll force the current game to zero if the server isn't in a streaming session. // as possible, we'll force the current game to zero if the server isn't in a streaming session.
String serverState = getXmlString(serverInfo, "state"); String serverState = getXmlString(serverInfo, "state");
if (serverState != null && !serverState.endsWith("_SERVER_AVAILABLE")) { if (serverState != null && serverState.endsWith("_SERVER_BUSY")) {
String game = getXmlString(serverInfo, "currentgame"); String game = getXmlString(serverInfo, "currentgame");
return Integer.parseInt(game); return Integer.parseInt(game);
} }
@ -442,19 +442,6 @@ public class NvHTTP {
} }
} }
public boolean isCurrentClient(String serverInfo) throws XmlPullParserException, IOException {
String currentClient = getXmlString(serverInfo, "CurrentClient");
if (currentClient != null) {
return !currentClient.equals("0");
}
else {
// For versions of GFE that lack this field, we'll assume we are
// the current client. If we're not, we'll get a response error that
// will let us know.
return true;
}
}
public NvApp getAppById(int appId) throws IOException, XmlPullParserException { public NvApp getAppById(int appId) throws IOException, XmlPullParserException {
LinkedList<NvApp> appList = getAppList(); LinkedList<NvApp> appList = getAppList();
for (NvApp appFromList : appList) { for (NvApp appFromList : appList) {
@ -638,16 +625,20 @@ public class NvHTTP {
} }
public boolean quitApp() throws IOException, XmlPullParserException { public boolean quitApp() throws IOException, XmlPullParserException {
// First check if this client is allowed to quit the app. Newer GFE versions String xmlStr = openHttpConnectionToString(baseUrlHttps + "/cancel?" + buildUniqueIdUuidString(), false);
// will just return success even if quitting fails if we're not the original requestor. String cancel = getXmlString(xmlStr, "cancel");
if (!isCurrentClient(getServerInfo())) { if (Integer.parseInt(cancel) == 0) {
return false;
}
// Newer GFE versions will just return success even if quitting fails
// if we're not the original requestor.
if (getCurrentGame(getServerInfo()) != 0) {
// Generate a synthetic GfeResponseException letting the caller know // Generate a synthetic GfeResponseException letting the caller know
// that they can't kill someone else's stream. // that they can't kill someone else's stream.
throw new GfeHttpResponseException(599, ""); throw new GfeHttpResponseException(599, "");
} }
String xmlStr = openHttpConnectionToString(baseUrlHttps + "/cancel?" + buildUniqueIdUuidString(), false); return true;
String cancel = getXmlString(xmlStr, "cancel");
return Integer.parseInt(cancel) != 0;
} }
} }