io.gs2.script.Gs2ScriptRestClient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gs2-java-sdk-script Show documentation
Show all versions of gs2-java-sdk-script Show documentation
Game Server Services SDK for Java GS2-Script Library
The newest version!
/*
* Copyright 2016 Game Server Services, Inc. or its affiliates. All Rights
* Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package io.gs2.script;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.json.JSONObject;
import org.json.JSONArray;
import io.gs2.model.AsyncAction;
import io.gs2.model.AsyncResult;
import io.gs2.exception.*;
import io.gs2.net.*;
import io.gs2.util.EncodingUtil;
import io.gs2.AbstractGs2Client;
import io.gs2.script.request.*;
import io.gs2.script.result.*;
import io.gs2.script.model.*;
/**
* GS2 Script API クライアント
*
* @author Game Server Services, Inc.
*
*/
public class Gs2ScriptRestClient extends AbstractGs2Client {
/**
* コンストラクタ。
*
* @param gs2RestSession セッション
*/
public Gs2ScriptRestClient(Gs2RestSession gs2RestSession) {
super(gs2RestSession);
}
class DescribeNamespacesTask extends Gs2RestSessionTask {
private DescribeNamespacesRequest request;
public DescribeNamespacesTask(
DescribeNamespacesRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/";
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
if (this.request.getPageToken() != null) {
queryStrings.add("pageToken=" + EncodingUtil.urlEncode((String.valueOf(this.request.getPageToken()))));
}
if (this.request.getLimit() != null) {
queryStrings.add("limit=" + String.valueOf(this.request.getLimit()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.GET)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースの一覧を取得
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void describeNamespacesAsync(
DescribeNamespacesRequest request,
AsyncAction> callback
) {
DescribeNamespacesTask task = new DescribeNamespacesTask(request, callback, DescribeNamespacesResult.class);
session.execute(task);
}
/**
* ネームスペースの一覧を取得
*
* @param request リクエストパラメータ
*/
public DescribeNamespacesResult describeNamespaces(
DescribeNamespacesRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
describeNamespacesAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class CreateNamespaceTask extends Gs2RestSessionTask {
private CreateNamespaceRequest request;
public CreateNamespaceTask(
CreateNamespaceRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/";
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
if (this.request.getName() != null) {
json.put("name", this.request.getName());
}
if (this.request.getDescription() != null) {
json.put("description", this.request.getDescription());
}
if (this.request.getContextStack() != null) {
json.put("contextStack", this.request.getContextStack());
}
builder.setBody(json.toString().getBytes());
builder
.setMethod(HttpTask.Method.POST)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースを新規作成
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void createNamespaceAsync(
CreateNamespaceRequest request,
AsyncAction> callback
) {
CreateNamespaceTask task = new CreateNamespaceTask(request, callback, CreateNamespaceResult.class);
session.execute(task);
}
/**
* ネームスペースを新規作成
*
* @param request リクエストパラメータ
*/
public CreateNamespaceResult createNamespace(
CreateNamespaceRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
createNamespaceAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class GetNamespaceStatusTask extends Gs2RestSessionTask {
private GetNamespaceStatusRequest request;
public GetNamespaceStatusTask(
GetNamespaceStatusRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/status";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.GET)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースを取得
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void getNamespaceStatusAsync(
GetNamespaceStatusRequest request,
AsyncAction> callback
) {
GetNamespaceStatusTask task = new GetNamespaceStatusTask(request, callback, GetNamespaceStatusResult.class);
session.execute(task);
}
/**
* ネームスペースを取得
*
* @param request リクエストパラメータ
*/
public GetNamespaceStatusResult getNamespaceStatus(
GetNamespaceStatusRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
getNamespaceStatusAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class GetNamespaceTask extends Gs2RestSessionTask {
private GetNamespaceRequest request;
public GetNamespaceTask(
GetNamespaceRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.GET)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースを取得
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void getNamespaceAsync(
GetNamespaceRequest request,
AsyncAction> callback
) {
GetNamespaceTask task = new GetNamespaceTask(request, callback, GetNamespaceResult.class);
session.execute(task);
}
/**
* ネームスペースを取得
*
* @param request リクエストパラメータ
*/
public GetNamespaceResult getNamespace(
GetNamespaceRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
getNamespaceAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class UpdateNamespaceTask extends Gs2RestSessionTask {
private UpdateNamespaceRequest request;
public UpdateNamespaceTask(
UpdateNamespaceRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
if (this.request.getDescription() != null) {
json.put("description", this.request.getDescription());
}
if (this.request.getContextStack() != null) {
json.put("contextStack", this.request.getContextStack());
}
builder.setBody(json.toString().getBytes());
builder
.setMethod(HttpTask.Method.PUT)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースを更新
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void updateNamespaceAsync(
UpdateNamespaceRequest request,
AsyncAction> callback
) {
UpdateNamespaceTask task = new UpdateNamespaceTask(request, callback, UpdateNamespaceResult.class);
session.execute(task);
}
/**
* ネームスペースを更新
*
* @param request リクエストパラメータ
*/
public UpdateNamespaceResult updateNamespace(
UpdateNamespaceRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
updateNamespaceAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class DeleteNamespaceTask extends Gs2RestSessionTask {
private DeleteNamespaceRequest request;
public DeleteNamespaceTask(
DeleteNamespaceRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.DELETE)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* ネームスペースを削除
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void deleteNamespaceAsync(
DeleteNamespaceRequest request,
AsyncAction> callback
) {
DeleteNamespaceTask task = new DeleteNamespaceTask(request, callback, DeleteNamespaceResult.class);
session.execute(task);
}
/**
* ネームスペースを削除
*
* @param request リクエストパラメータ
*/
public DeleteNamespaceResult deleteNamespace(
DeleteNamespaceRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
deleteNamespaceAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class DescribeScriptsTask extends Gs2RestSessionTask {
private DescribeScriptsRequest request;
public DescribeScriptsTask(
DescribeScriptsRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
if (this.request.getPageToken() != null) {
queryStrings.add("pageToken=" + EncodingUtil.urlEncode((String.valueOf(this.request.getPageToken()))));
}
if (this.request.getLimit() != null) {
queryStrings.add("limit=" + String.valueOf(this.request.getLimit()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.GET)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトの一覧を取得します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void describeScriptsAsync(
DescribeScriptsRequest request,
AsyncAction> callback
) {
DescribeScriptsTask task = new DescribeScriptsTask(request, callback, DescribeScriptsResult.class);
session.execute(task);
}
/**
* スクリプトの一覧を取得します
*
* @param request リクエストパラメータ
*/
public DescribeScriptsResult describeScripts(
DescribeScriptsRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
describeScriptsAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class CreateScriptTask extends Gs2RestSessionTask {
private CreateScriptRequest request;
public CreateScriptTask(
CreateScriptRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
if (this.request.getName() != null) {
json.put("name", this.request.getName());
}
if (this.request.getDescription() != null) {
json.put("description", this.request.getDescription());
}
if (this.request.getScript() != null) {
json.put("script", this.request.getScript());
}
if (this.request.getContextStack() != null) {
json.put("contextStack", this.request.getContextStack());
}
builder.setBody(json.toString().getBytes());
builder
.setMethod(HttpTask.Method.POST)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトを新規作成します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void createScriptAsync(
CreateScriptRequest request,
AsyncAction> callback
) {
CreateScriptTask task = new CreateScriptTask(request, callback, CreateScriptResult.class);
session.execute(task);
}
/**
* スクリプトを新規作成します
*
* @param request リクエストパラメータ
*/
public CreateScriptResult createScript(
CreateScriptRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
createScriptAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class GetScriptTask extends Gs2RestSessionTask {
private GetScriptRequest request;
public GetScriptTask(
GetScriptRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script/{scriptName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
url = url.replace("{scriptName}", this.request.getScriptName() == null|| this.request.getScriptName().length() == 0 ? "null" : String.valueOf(this.request.getScriptName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.GET)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトを取得します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void getScriptAsync(
GetScriptRequest request,
AsyncAction> callback
) {
GetScriptTask task = new GetScriptTask(request, callback, GetScriptResult.class);
session.execute(task);
}
/**
* スクリプトを取得します
*
* @param request リクエストパラメータ
*/
public GetScriptResult getScript(
GetScriptRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
getScriptAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class UpdateScriptTask extends Gs2RestSessionTask {
private UpdateScriptRequest request;
public UpdateScriptTask(
UpdateScriptRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script/{scriptName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
url = url.replace("{scriptName}", this.request.getScriptName() == null|| this.request.getScriptName().length() == 0 ? "null" : String.valueOf(this.request.getScriptName()));
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
if (this.request.getDescription() != null) {
json.put("description", this.request.getDescription());
}
if (this.request.getScript() != null) {
json.put("script", this.request.getScript());
}
if (this.request.getContextStack() != null) {
json.put("contextStack", this.request.getContextStack());
}
builder.setBody(json.toString().getBytes());
builder
.setMethod(HttpTask.Method.PUT)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトを更新します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void updateScriptAsync(
UpdateScriptRequest request,
AsyncAction> callback
) {
UpdateScriptTask task = new UpdateScriptTask(request, callback, UpdateScriptResult.class);
session.execute(task);
}
/**
* スクリプトを更新します
*
* @param request リクエストパラメータ
*/
public UpdateScriptResult updateScript(
UpdateScriptRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
updateScriptAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class DeleteScriptTask extends Gs2RestSessionTask {
private DeleteScriptRequest request;
public DeleteScriptTask(
DeleteScriptRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script/{scriptName}";
url = url.replace("{namespaceName}", this.request.getNamespaceName() == null|| this.request.getNamespaceName().length() == 0 ? "null" : String.valueOf(this.request.getNamespaceName()));
url = url.replace("{scriptName}", this.request.getScriptName() == null|| this.request.getScriptName().length() == 0 ? "null" : String.valueOf(this.request.getScriptName()));
List queryStrings = new ArrayList<> ();
if (this.request.getContextStack() != null) {
queryStrings.add("contextStack=" + EncodingUtil.urlEncode(this.request.getContextStack()));
}
url += "?" + String.join("&", queryStrings);
builder
.setMethod(HttpTask.Method.DELETE)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトを削除します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void deleteScriptAsync(
DeleteScriptRequest request,
AsyncAction> callback
) {
DeleteScriptTask task = new DeleteScriptTask(request, callback, DeleteScriptResult.class);
session.execute(task);
}
/**
* スクリプトを削除します
*
* @param request リクエストパラメータ
*/
public DeleteScriptResult deleteScript(
DeleteScriptRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
deleteScriptAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
class DebugInvokeTask extends Gs2RestSessionTask {
private DebugInvokeRequest request;
public DebugInvokeTask(
DebugInvokeRequest request,
AsyncAction> userCallback,
Class clazz
) {
super(
(Gs2RestSession) session,
userCallback,
clazz
);
this.request = request;
}
@Override
protected void executeImpl() {
String url = Gs2RestSession.EndpointHost
.replace("{service}", "script")
.replace("{region}", session.getRegion().getName())
+ "/{namespaceName}/script/debug/invoke";
ObjectMapper mapper = new ObjectMapper();
JSONObject json = new JSONObject();
if (this.request.getScript() != null) {
json.put("script", this.request.getScript());
}
if (this.request.getArgs() != null) {
json.put("args", this.request.getArgs());
}
if (this.request.getContextStack() != null) {
json.put("contextStack", this.request.getContextStack());
}
builder.setBody(json.toString().getBytes());
builder
.setMethod(HttpTask.Method.POST)
.setUrl(url)
.setHeader("Content-Type", "application/json")
.setHttpResponseHandler(this);
if (this.request.getRequestId() != null) {
builder.setHeader("X-GS2-REQUEST-ID", this.request.getRequestId());
}
builder
.build()
.send();
}
}
/**
* スクリプトを実行します
*
* @param callback コールバック
* @param request リクエストパラメータ
*/
public void debugInvokeAsync(
DebugInvokeRequest request,
AsyncAction> callback
) {
DebugInvokeTask task = new DebugInvokeTask(request, callback, DebugInvokeResult.class);
session.execute(task);
}
/**
* スクリプトを実行します
*
* @param request リクエストパラメータ
*/
public DebugInvokeResult debugInvoke(
DebugInvokeRequest request
) {
final AsyncResult[] resultAsyncResult = new AsyncResult[]{null};
debugInvokeAsync(
request,
result -> resultAsyncResult[0] = result
);
while (resultAsyncResult[0] == null) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
}
if(resultAsyncResult[0].getError() != null) {
throw resultAsyncResult[0].getError();
}
return resultAsyncResult[0].getResult();
}
}