Rich UI Infobus

Rich UI Infobus는 다음과 같이 작동하는 공개 및 등록 메커니즘을 사용 가능하게 하는 라이브러리입니다.
  • 핸들러는 특정한 이름의 이벤트에 등록됩니다. 등록할 때 핸들러는 이벤트 발생 시 데이터를 받을 함수도 참조합니다. 그런 다음 적절한 때에 이 함수를 호출할 수 있도록 Infobus가 함수를 등록합니다.
    예를 들어 다음 Rich UI 핸들러 파트는 sample.test라는 이벤트에 등록하고 임베딩 핸들러에서 사용할 수 있는 레이블(표시 영역)을 제공합니다.
    Handler embeddedHandler Type RUIHandler {onConstructionFunction=start}
    
       feedback TextLabel;
    
       function start()
          InfoBus.subscribe("com.mycompany.sample.test", showPublish);
       end
    
       function showPublish(eventName STRING in, data ANY in)
          feedback.text = "The " + eventName + " event occurred and passed " + data;
       end
    end

    실제 경우에 showPublish 함수는 몇 개의 필드를 가진 레코드를 수신할 수 있으며 데이터를 원격 서비스로 전송합니다.

  • 동일한 Rich UI 애플리케이션에 있는 같거나 다른 핸들러는 이벤트 이름 및 일부 이벤트 특정 데이터를 지정하여 이벤트를 공개합니다. 공개할 때 Infobus는 이벤트 특정 데이터를 함수에 전달하여 등록 시 지정된 함수를 호출합니다.

    예를 들어 다음 핸들러는 이전 핸들러를 임베드하고, 이벤트를 공개하며, 이를 통해 다음 명령문을 표시합니다. sample.text 이벤트가 발생하여 서비스에 대한 입력 데이터를 전달했습니다.

    Handler InfoBusTest Type RUIHandler
       { initialUI = [myButton, myDiv] }
    
       myButton Button{text = "Publish the event", onClick ::= clickHandler};
       myDiv Div { children = [new embeddedHandler{}.feedback] };
    
       function clickHandler(e Event in)
          InfoBus.publish("com.mycompany.sample.test", "input data for a service");
       end
    end	

    InfoBus.publish 함수에는 showPublish 함수의 이름이 포함되지 않습니다. 대신 Infobus는 중개자 역할을 수행하여 적절한 함수를 호출합니다.

Infobus 함수

다음 Infobus 함수가 사용됩니다.
  • Infobus.subscribe는 두 가지 인수를 허용하는데, 이 인수는 이벤트 이름과 이벤트를 공개할 때 Infobus에서 호출하는 함수에 대한 참조입니다. 이벤트 이름에는 와일드카드 문자가 포함될 수 있습니다(나중에 설명됨).
    호출할 함수를 코딩해야 합니다. 해당 함수는 다음 위임 파트를 기반으로 합니다. 이는 이벤트를 공개할 때 제공하는 데이터 유형에 상관 없이 함수가 이 데이터 유형을 승인할 수 있음을 나타냅니다.
    InfoBusCallback(eventName String in, data any in) 

    또한 Infobus.subscribe는 이벤트에서 등록 해제하는 데 사용할 수 있는 등록 값(ANY 유형)을 리턴합니다.

  • Infobus.unsubscribe는 단일 매개변수를 허용합니다. Infobus.subscribe에서 ANY 유형의 값이 리턴됩니다. 이 함수에는 리턴값이 없습니다.
  • Infobus.publish는 두 가지 인수를 허용하는데, 이 인수는 이벤트 이름과 사용자가 제공하는 데이터입니다. 이 함수에는 리턴값이 없습니다.

Rich UI 핸들러를 Infobus에 등록하면 해당 핸들러를 메모리에서 제거할 수 없습니다. 예를 들어 사용자가 단추를 클릭하면 함수에 핸들러를 작성하고, 핸들러를 Infobus에 등록하면 핸들러를 Infobus에서 등록 해제해야 핸들러와 해당 위젯을 메모리에서 제거할 수 있습니다.

대부분의 경우 메모리는 EGL 런타임 코드에 의해 해제됩니다. 그러나 “Rich UI 메모리 관리자” 주제에서 메모리 관리를 위한 더 많은 제어 방법에 대해 설명합니다.

이벤트 이름 및 와일드카드

이벤트 이름은 하나 이상의 토큰 문자 기호(예: 이 예에서는 sampletest)로 구성됩니다. 각 기호는 마침표로 구분됩니다.

Infobus.subscribe를 사용하여 둘 이상의 이벤트에 등록할 수 있습니다. 두 와일드카드 문자를 사용할 수 있으며 동일한 Infobus.subscribe 호출에서 둘 다 사용할 수 있습니다.
  • 토큰을 대신해서 별표(*)를 사용하는 경우 별표를 대신해서 지정한 토큰에 상관 없이 사용자 코드가 이벤트 이름과 일치하는 이름의 이벤트를 공개할 때 Infobus.subscribe에서 등록한 함수가 호출됩니다. 예를 들어 Infobus.subscribe에서 이벤트 이름을 com.mycompany.update.*.new.employee로 식별하면 Infobus.subscribe에서 등록한 함수가 다음 호출에 대한 응답에 호출됩니다.
    InfoBus.publish("com.mycompany.update.sales.new.employee", "some data");
    
    InfoBus.publish("com.mycompany.update.marketing.new.employee", "some data");
    
    InfoBus.publish("com.mycompany.update.outreach.new.employee", "some data");
  • 마지막 토큰을 대신해서 더블 별표(**)를 사용하는 경우 별표를 대신해서 지정한 일련의 토큰에 상관 없이 사용자 코드가 이벤트 이름과 일치하는 이름의 이벤트를 공개할 때 Infobus.subscribe에서 등록한 함수가 호출됩니다. 예를 들어 Infobus.subscribe에서 이벤트 이름을 com.mycompany.update.sales.**로 식별하면 Infobus.subscribe에서 등록한 함수가 다음 호출에 대한 응답에 호출됩니다.
    InfoBus.publish("com.mycompany.update.sales.new.employee", "some data");
    
    InfoBus.publish("com.mycompany.update.sales.temporary.employee", "some data");
    
    InfoBus.publish("com.mycompany.update.sales.outreach.new.temporary.employee", "some data");

추가 세부사항

Infobus 메커니즘은 OpenAjax 연합 구현을 기반으로 합니다. 이 메커니즘에 대한 추가 세부사항이 필요할 수 있으며 다음과 같이 세부사항을 얻을 수 있습니다.
  1. OpenAjax 연합 웹 사이트로 이동하십시오.

       http://www.openajax.org/index.php

  2. 위키 > 멤버 위키를 클릭하십시오.
  3. 검색 필드에 문자열 OpenAjax Hub 1.0 Specification PublishSubscribe를 입력하십시오.

Rich UI에서는 filter 또는 scope와 관련된 스펙 문구를 지원하지 않습니다.