コンテンツにスキップ

イベント受信用コールバック関数の登録

このセクションでは、リモートプレイから受信するイベントの種類、受信プロセス、およびこれらのイベントを処理するためにSDKでコールバック関数を登録する方法について説明します。

イベント受信プロセス

SDKにコールバック関数を登録することで、ホストPCゲームはリモートプレイからのステータスイベントとチャットイベントを受信できます。

ステータスイベントの受信

ステータスイベントは、リモートプレイが開始または終了すると発生し、ホストPCゲームがそれに応じて異なる動作を実装できるようにします。たとえば、リモートプレイ中に使用できない機能(「支払い」や「ログアウト」など)がある場合、リモートプレイ開始イベントを受信したときに、これらの機能が利用できないことを通知するポップアップを表示できます。

ホストPCゲームにおけるリモートプレイステータスイベントの処理の例には次のものが含まれます:

  • リモートプレイが開始されるとマウスカーソルを隠し、リモートプレイが終了すると再び表示します。
  • リモートプレイが開始されると、キャッシュショップが利用できないことをユーザーに通知するポップアップを表示します。

チャットイベントの受信

ユーザーがリモートプレイセッションでチャットメッセージを入力すると、ホストPCゲームはチャット文字列を受信し、それをゲーム内チャットウィンドウに送信してリモートプレイチャット機能を有効にします。
チャットイベントを受信してリモートプレイチャット機能を実装するプロセスは次のとおりです:

1) ユーザーがリモートプレイのウェブインターフェースのテキストボックスに文字列を入力し、Enterキーを押すと、文字列は以下のようにホストPCのゲームに送信されます。 * リモートプレイの最大入力長は150文字で、読み方向はLTR(左から右)およびRTL(右から左)です。

2) ホストPCゲームでは、文字列は事前に登録されたコールバック関数を通じて受信されます。

3) ホストPCゲームでは、対応する文字列がゲームチャットウィンドウに渡されます。

コールバック関数の登録

リモートプレイからイベントを受信するには、SDKにリモートプレイプラグインをインポートし、コールバック関数を登録する必要があります。

コールバック関数が登録されると、ホストPCゲームはリモートプレイ中にイベントを受信する準備が整います。ゲームは受信した各イベントを分析し、それに応じて環境に適用することができます。

以下は、SDKでコールバック関数を登録する方法の例です。HiveRemotePlayManager.RegisterCallbackを使用してコールバック関数を登録します。

using System.Runtime.InteropServices;
using UnityEngine;
using AOT;

public class {YourCustomClass} : MonoBehaviour
{
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    private delegate void RemotePlayCallbackType(int type, IntPtr data);

    [DllImport("plugins/RemotePlayDll", CallingConvention = CallingConvention.Cdecl)]
    private static extern void RegisterCallback(RemotePlayCallbackType callback);

    private static RemotePlayCallbackType _callbackDelegate;

    [MonoPInvokeCallback(typeof(RemotePlayCallbackType))]
    private static void RegisterRemoteCallbackFunction(int type, IntPtr data)
    {
        string jsonData = Marshal.PtrToStringAnsi(data);
        Debug.Log("REMOTE Callback DATA : " + jsonData);
    }

    void Start()
    {
        _callbackDelegate = RegisterRemoteCallbackFunction;
        RegisterCallback(_callbackDelegate);
    }
}

{YourCustomClass}.h

#pragma once

#include "HAL/PlatformProcess.h"
#include "Misc/Paths.h"

class {YourCustomClass}
{
public:
    static void Initialize();

private:
    static void StaticCallback(int Type, const char* Data);
};

{YourCustomClass}.cpp

#include "{YourCustomClass}.h"

typedef void(*FP_RegisterCallback)(void(*)(int, const char*));

void {YourCustomClass}::Initialize()
{
    FString DllPath =
        FPaths::Combine(
            FPaths::GetPath(FPlatformProcess::ExecutablePath()),
            TEXT("Plugins/RemotePlayDll.dll"));

    void* DllHandle = FPlatformProcess::GetDllHandle(*DllPath);

    if (!DllHandle)
    {
        UE_LOG(LogTemp, Error, TEXT("RemotePlay DLL Load Failed"));
        return;
    }

    FP_RegisterCallback RegisterCallback =
        (FP_RegisterCallback)FPlatformProcess::GetDllExport(
            DllHandle,
            TEXT("RegisterCallback"));

    if (RegisterCallback)
    {
        RegisterCallback(&StaticCallback);
    }
}

void {YourCustomClass}::StaticCallback(int Type, const char* Data)
{
    UE_LOG(LogTemp, Log, TEXT("REMOTE Callback DATA : %s"), *FString(Data));
}

イベントプロトコル

このセクションでは、ゲーム内のコールバック関数を通じて受信されるステータスイベントおよびチャットイベントのプロトコルについて説明します。

JSONプロトコル

キー 値の型 説明 その他
version version 数値 Json バージョン情報 例を参照
eventType eventType 文字列 イベントタイプ - "Event" と "Message" の値を含む 例を参照
eventValue eventValue オブジェクト イベント値オブジェクト 例を参照
eventValue - value eventValue - value 文字列 イベント値 例を参照
eventValue - action eventValue - action 文字列 イベントアクション 例を参照
etc etc オブジェクト 拡張目的のため 例を参照

ステータスイベントデータの例

以下はステータスイベントデータの例です。

{
    "version"        : "1.0.2411.0",
    "eventType"      : "Event",
    "eventValue"     : {
                            "value"  : "REMOTE_PLAY_CONNECTED"
                         },
    "etc"            : { }
}
// value    : REMOTE_PLAY_CONNECTED, REMOTE_PLAY_DISCONNECTED

チャットイベントデータの例

受信したチャット文字列はUTF-8でエンコードされ、その後Base64に変換されます。また、複数の言語をサポートするために読み取り方向情報も含まれています。

以下はチャットイベントデータの例です。

{
    "version"        : "1.0.2411.0",
    "eventType"       : "Message" ,
    "eventValue"     : {
                            "value"  : "Something Message",
                            "action" : "LTR | RTL"
                       },
    "etc"            : { }
}
// value    : Base64  (UTF-8 문장) 인코딩
// action   : LTR (아랍어를 제외한 문자) | RTL (아랍어)