最近のアクセス:
外部アプリケーションから通知メッセージを受信し、処理する方法

サーバーからクライアントだけではなく、クライアントからサーバーへの通知の送信が必要なシナリオがあります。
通常、N 対 N の通信 (チャットルーム) では、クライアント (Web またはスマートデバイス) からサーバー、およびサーバーからクライアントに通知が送信される必要があります (双方向通信)。
サーバーからクライアントに通知を送信するには、WebNotifications 外部オブジェクトを使用できます。
現在、GeneXus は、クライアントからサーバーへ通知を送信するための API はサポートしていませんが、外部アプリケーションを使用して通知を送信できます。GeneXus では、メッセージを受信して処理することができます。

実装

外部アプリケーションから通知を受け取ったら、それを処理する必要があります。
通知を受け取るときや、Web ソケットへの接続を開いたとき、または閉じたときに使用する、ハンドラーを確立するプロパティがあります。チャットルームでは、新しいクライアントがチャットに加わったり、チャットから抜けたりしたときに認識するのに役立ちます。
関係するプロパティは次のとおりです (ジェネレーターレベル)。
プロパティ名 説明               プロシージャーの署名
WebNotifications Provider: None | In Process None: アプリケーションは通知を受け取りません。
In Process: アプリケーションは通知を受け取って処理できます。
                           ------
Received Handler ナレッジベースのプロシージャーです。このプロシージャーは、新しいメッセージを受信したときに実行されます。 parm(in:&ClientId, in:&NotificationInfo)
&ClientId: VarChar(200)
&NotificationInfo は NotificationInfo データタイプ (事前定義済みの構造化データタイプ GeneXus.Web.Notifications.NotificationInfo) です。
受信メッセージは、SDT の [ Message ] プロパティにロードされます。
SDT の ID および Object プロパティは、外部通知では空です。
Open Handler ナレッジベースのプロシージャーです。このプロシージャーは、Web ソケットへの接続が完了したときに実行されます。 parm(in:&ClientId)
Close Handler ナレッジベースのプロシージャーです。このプロシージャーは、Web ソケットへの接続が閉じられたときに実行されます。 parm(in:&ClientId)
Error Handler ナレッジベースのプロシージャーです。このプロシージャーは、Web ソケット接続でエラーがスローされたときに実行されます。 parm(in:&ClientId, in:&ErrorMessage)

外部アプリケーションから受信したメッセージを GeneXus Web アプリケーションで処理し、Web ソケットに接続されている GeneXus クライアントに送信する Web パネルがあるとします。
この例のナレッジベースのプロパティは次のとおりです:
イメージ:33640.png
[ Received Handler ] プロパティが NewMessageReceived プロシージャーに設定されていることに注目してください。コードは次のとおりです:
parm(in:&ClientId, in:&NotificationInfo);
&NotificationInfotoSend.Message = Format(!"%1 (%2)", &NotificationInfo.Message.Trim(), &ClientId)
&webNotification.Broadcast(&notificationInfoToSend)
Received Handler は 2 つのパラメーターを受け取ります。1 つは通知を送信するクライアントの &ClientId で、もう 1 つは受信メッセージが含まれている SDT です (この場合、SDT プロパティの ID と Object は常に空です) 。ここでは、クライアントに送信するメッセージをロードする、別の NotificationInfo 変数 (&NotificationInfotoSend) を定義しています。この変数には、元のメッセージと ClientId 情報が含まれます。この場合、メッセージはすべての人に送信されます (WebNotification の BroadCast メソッドを使用)。
次に、これらのメッセージを Web パネルに表示します。ここでは、NewMessageReceived プロシージャーから送信された Web 通知を受け取るための OnMessage イベントを使用します。
Event OnMessage(&NotificationInfo)
    &IncomingMessage = &NotificationInfo.Message
    //Process the web notification
Endevent

  • この例を試すには、通知を Web アプリケーションに送信する外部クライアントをプログラミングする必要があります。GeneXus アプリケーションの Web ソケットに接続するためのエントリーポイントは次のとおりです。 
    • JAVA: ws://<サーバー>/<ベース URL>/gxwebsocket?<client_Id>
    • .NET: ws://<サーバー>/<ベース URL>/gxwebsocket.svc?<client_Id>
  • GeneXus クライアントの場合、client_Id はブラウザーインスタンスを識別する GUID です ([ ClientInformation.Id ] プロパティ)。Web パネルのコードに OnMessage イベントが含まれる場合は、Web ソケットにも接続します。そのため、クライアントのリストに別のクライアントとして表示されます。
  • プロパティ設定は CloudServices.config ファイルに保存され、それを本番運用に移行する必要があります。
  • コンパイルできるようにハンドラーの各プロパティで参照されるプロシージャーを呼び出す、ダミーのメインプロシージャーが必要です。 
サンプルはここからダウンロードできます。

要件

JSR-356 で定義された Java WebSocket 1.1 API。たとえば Tomcat の場合、バージョンは 7.0.60 以上が必要です。

使用可能バージョン

Java ジェネレーターの場合は GeneXus 15 Upgrade 3 以降、.NET ジェネレーターの場合は GeneXus 15 Upgrade 6 以降です。

参考情報

Client.Socket 外部オブジェクト


サブページ
Created: 18/10/29 01:05 by Admin Last update: 23/02/13 20:09 by Admin
カテゴリ
Powered by GXwiki 3.0