Agent E2E Call API

intdashのE2Eコールは、intdashサーバーに接続されているエッジとエッジがサーバーを介してメッセージをやり取りする仕組みです。 エッジからサーバーへのメッセージ送信ではiSCP 2.0のUpstream Callが、サーバーからエッジへの送信ではDownstream Callが使用されます。

intdash Edge Agent 2において、このE2Eコールの送受信はE2Eコーラーが担当します。 E2EコーラーはgRPCインターフェイス(Agent E2E Call API)を提供しており、クライアント(デバイスコネクターなど)からこれを呼び出すことでE2Eコールの送受信を行うことができます。

../_images/e2e-call-reference-overview.png

Agent E2E Call APIを使用するには、gRPCで通信するために必要なサービスとデータ構造を定義した .protoファイル をダウンロードして、クライアントを作成してください。

protoファイルに記載のとおり、Agent E2E Call APIには以下のメソッドが用意されています。


SendCall

SendCall を実行すると、intdash Edge Agent 2は、別のエッジに向けてE2Eコールを送信します。

iSCP 2.0のレベルでは、サーバーに向けてUpstream Callが送信されることになります。 Upstream Callが持つフィールドの詳細については、iSCP 2.0のプロトコル仕様書を参照してください。

Upstream Callのフィールドのうち、リクエスト用の構造体 SendCallRequest に存在しないものは、intdash Edge Agent 2によって自動的に付与されます。

skinparam ParticipantPadding 40

participant "gRPC Client\ne.g. Device Connector" as Client
participant "Edge A" as EdgeA
participant "intdash Server" as Server
participant "Edge B" as EdgeB

note over EdgeA
  intdash Edge Agent 2
end note

Client -> EdgeA: **SendCall(SendCallRequest)**

EdgeA -> Server: Upstream Call

EdgeA --> Client: return SendCallResult

Server -> EdgeB: Downstream Call

図 19 SendCall


SendReplyCall

SendReplyCall を実行すると、intdash Edge Agent 2は、別のエッジからの呼びかけのE2Eコールに対して応答のE2Eコールを送信します。

iSCP 2.0のレベルでは、サーバーに向けてUpstream Callが送信されることになります。 Upstream Callが持つフィールドの詳細については、iSCP 2.0のプロトコル仕様書を参照してください。

Upstream Callのフィールドのうち、リクエスト用の構造体 SendReplyCallRequest に存在しないものは、intdash Edge Agent 2によって自動的に付与されます。 また、 SendReplyCallRequest のフィールド request_call_id には、元の呼びかけのコールIDを指定してください。

skinparam ParticipantPadding 40

participant "gRPC Client\ne.g. Device Connector" as Client
participant "Edge A" as EdgeA
participant "intdash Server" as Server
participant "Edge B" as EdgeB

note over EdgeA
  intdash Edge Agent 2
end note

Client -> EdgeA: **SendReplyCall(SendReplyCallRequest)**

EdgeA -> Server: Upstream Call

EdgeA --> Client: return SendReplyCallResult

Server -> EdgeB: Downstream Call

図 20 SendReplyCall


SendCallAndWaitReplyCall

SendCallAndWaitReplyCall を実行すると、intdash Edge Agent 2は、別のエッジに向けてE2Eコールを送信し、送信先のエッジから応答が返されるまで処理をブロックします。

iSCP 2.0のレベルでは、サーバーに向けてUpstream Callが送信されます。 また、送信先エッジからの応答を、サーバーからDownstream Callとして受信できるまで待機することになります。

Upstream CallおよびDownstream Callが持つフィールドの詳細については、iSCP 2.0のプロトコル仕様書を参照してください。

Upstream Callのフィールドのうち、リクエスト用の構造体 SendCallAndWaitReplyCallRequest に存在しないフィールドは、intdash Edge Agent 2によって自動的に付与されます。

受信したDownstream Callは、構造体 SendCallAndWaitReplyCallResult の形式で返されます。

skinparam ParticipantPadding 40

participant "gRPC Client\ne.g. Device Connector" as Client
participant "Edge A" as EdgeA
participant "intdash Server" as Server
participant "Edge B" as EdgeB

note over EdgeA
  intdash Edge Agent 2
end note

Client -> EdgeA: **SendCallAndWaitReplyCall(**\n  **SendCallAndWaitReplyCallRequest**\n**)**

EdgeA -> Server: Upstream Call

Server -> EdgeB: Downstream Call

EdgeB -> Server: Upstream Call

Server -> EdgeA: Downstream Call

EdgeA --> Client: return SendCallAndWaitReplyCallResult

図 21 SendCallAndWaitReplyCall


ReceiveCalls

ReceiveCalls を実行すると、intdash Edge Agent 2は、別のエッジからのコール(ただしリプライコール以外)を受信するためのストリームを返します。このメソッドはserver streaming RPCです。

iSCP 2.0のレベルでは、サーバーから複数のDownstream Callを受信することになります。

ストリームから取り出すことができる構造体 ReceiveCallsResult が、受信したDownstream Callを表します。

skinparam ParticipantPadding 40

participant "gRPC Client\ne.g. Device Connector" as Client
participant Stream
participant "Edge A" as EdgeA
participant "intdash Server" as Server
participant "Edge B" as EdgeB

note over EdgeA
  intdash Edge Agent 2
end note

Client -> EdgeA: **ReceiveCalls()**

EdgeA -> Stream ** : create Stream

EdgeA --> Client: return Stream

|||

EdgeB -> Server: Upstream Call (non-reply call)

Server -> EdgeA: Downstream Call

EdgeA -> Stream: ReceiveCallsResult

EdgeB -> Server: Upstream Call (non-reply call)

Server -> EdgeA: Downstream Call

EdgeA -> Stream: ReceiveCallsResult

図 22 ReceiveCalls


ReceiveReplyCalls

ReceiveReplyCalls を実行すると、intdash Edge Agent 2は、別のエッジからのリプライコールを受信するストリームを返します。このメソッドはserver streaming RPCです。

iSCP 2.0のレベルでは、サーバーから複数のDownstream Callを受信することになります。

ストリームから取り出すことができる構造体 ReceiveReplyCallsResult が、受信したDownstream Callを表します。

skinparam ParticipantPadding 40

participant "gRPC Client\ne.g. Device Connector" as Client
participant Stream
participant "Edge A" as EdgeA
participant "intdash Server" as Server
participant "Edge B" as EdgeB

note over EdgeA
  intdash Edge Agent 2
end note

Client -> EdgeA: **ReceiveReplyCalls()**

EdgeA -> Stream ** : create Stream

EdgeA --> Client: return Stream

|||

EdgeB -> Server: Upstream Call (reply call)

Server -> EdgeA: Downstream Call

EdgeA -> Stream: ReceiveReplyCallsResult

EdgeB -> Server: Upstream Call (reply call)

Server -> EdgeA: Downstream Call

EdgeA -> Stream: ReceiveReplyCallsResult

図 23 ReceiveReplyCalls