Как я могу общаться между Unity и лямбда-функцией aws? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть рабочий UnityWebRequest в Unity ...

private static void SendMessageToServerless(MessageBase message) {
    string uri = "https://urigoeshere.com/test";

    Get(uri, message);
}

private static void Get(string uri, MessageBase message) {
    instance.StartCoroutine(GetRequest(uri, message));
}

private static IEnumerator GetRequest(string uri, MessageBase message) {
    // TODO: Do something with message
    UnityWebRequest webRequest = UnityWebRequest.Get(uri);
    yield return webRequest.SendWebRequest();

    Debug.Log(webRequest.downloadHandler.text);
}

... и отдельно у меня есть рабочая C # лямбда на AWS ...

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace SwordPlayServerless {
    public class Function {
        public string FunctionHandler(string input, ILambdaContext context) {
            return "Hello " + input;
        }
    }
}

... Однако я не уверен, как преодолеть разрыв и отправлять печатный контент от одного к другому.В ответ я обычно получаю следующее сообщение об ошибке:

{
  "errorType": "JsonSerializerException",
  "errorMessage": "Error converting the Lambda event JSON payload to a string. JSON strings must be quoted, for example \"Hello World\" in order to be converted to a string: Unexpected character encountered while parsing value: {. Path '', line 1, position 1.",
  ...

1 Ответ

0 голосов
/ 18 февраля 2019

При отправке json-данных вам нужно настроить лямбда-функцию так, чтобы ожидание JObject в качестве входа.Затем вы можете привести json к любому подходящему входящему или исходящему объекту:

using Newtonsoft.Json.Linq;

public JObject FunctionHandler(JObject jsonContent, ILambdaContext context) {
    Message clientMessage = jsonContent.ToObject<Message>();
    // ...
    Message response = new Message();
    return JObject.FromObject(response);
}

В Unity встроена поддержка JSON. Мой исходный код был близок ...

private static void SendMessageToServerless(Message message) {
    string uri = "https://example.com/test";

    instance.StartCoroutine(SendMessageToServerlessAsync(uri, message));
}

private static IEnumerator SendMessageToServerlessAsync(string uri, Message message) {
    UnityWebRequest webRequest = UnityWebRequest.Put(uri, JsonUtility.ToJson(message));
    yield return webRequest.SendWebRequest();

    if (webRequest.isNetworkError) {
        Debug.LogError("Network error: " + webRequest.error);
    } else { 
        Message response = JsonUtility.FromJson<Message>(webRequest.downloadHandler.text);
        Debug.Log(response.statusCode);
    }
}

В этоми сервер, и клиент могут использовать одно и то же определение для класса Message, если он сериализуем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...