Проблема с использованием herenow PubNub (Java-объекта)

Я включил файл Pubnub-4.0.0.jar в мой webroot. (Pubnub-4.0.0.jar можно скачать здесь: https://www.pubnub.com/docs/java/pubnub-java-sdk-v4)

Я пытаюсь вставить Java-код "ЗДЕСЬ СЕЙЧАС" в мой проект coldfusion, и у меня возникают некоторые проблемы с этим.

Java-код выглядит следующим образом:

PNConfiguration pnConfiguration = new PNConfiguration();
pnConfiguration.setSubscribeKey("SubscribeKey")   
PubNub pubnub = new PubNub(pnConfiguration);
pubNub.hereNow()
    .channels(Arrays.asList("ch1", "ch2", "ch3")) // who is present on those channels?
    .includeState(true) // include state with request (false by default)
    .includeUUIDs(true) // if false, only shows occupancy count
    .async(new PNCallback<PNHereNowResult>() {
        @Override
        public void onResponse(PNHereNowResult result, PNStatus status) {

        }
});

Мой соответствующий код Coldfusion выглядит следующим образом:

<cfobject type="java" class="com.pubnub.api.PNConfiguration" name="objPNConfiguration" >
<cfset PNConfiguration = objPNConfiguration.init() >
<cfset PNConfiguration.setSubscribeKey("SubscribeKey") >
<cfobject type="java" class="com.pubnub.api.PubNub" name="objPubNub" >
<cfset pubnub = objPubNub.init(PNConfiguration) >
<cfset tmp = pubnub.hereNow({channels: "5A4B3B59-FA6A-F22A-404F18EFA8112508"}) >
<cfdump var="#tmp#" >

Я не получаю никаких ошибок. Я чувствую, что способ, которым я вызываю метод hereNow, неправильный, или способ, которым я пытаюсь отобразить результаты, неправильный.

Может ли кто-нибудь оказать помощь в этом отношении? Спасибо

2 ответа

Решение

Pubnub предоставил для этого вызов API REST. https://s3.amazonaws.com/pubnub/sdk/RESTful+Documentation/index.html Спасибо, Pubnub.

Это выглядит как channels это имя метода, а не структура. То же самое касается includeState а также includeUUIDs, Вызывайте их как цепочечные методы и передавайте ожидаемые параметры.

  • channels() ожидает массив CF (т. е. объект java.util.List).
  • includeState а также includeUUIDs ожидать простое логическое значение.

Примерно так должно работать для первых трех (3) методов:

<cfscript>
config = createObject("java", "com.pubnub.api.PNConfiguration").init();
config.setSubscribeKey( "SubscribeKey" );
pubNub = createObject("java", "com.pubnub.api.PubNub").init( config );

pubNub.hereNow()
    .channels( ["ch1", "ch2", "ch3"] )
   .includeState( true )
   .includeUUIDs( true )
   .asynch(
      ....
    ) ;
</cfscript>

.async() Метод немного отличается тем, что ожидает некоторый тип объекта обратного вызова. К сожалению, похоже, что все классы обратного вызова abstract, (Я не уверен, почему. Ни один из классов обратного вызова не содержит реализацию, поэтому они функционируют больше как interface.) К сожалению, нет эквивалента для abstract занятия в CF.

Абстрактные классы не могут быть созданы и не могут быть использованы с классной функцией Dynamic Proxy Feature в CF10+. Динамический прокси - это удобная функция, которая позволяет вам заменить CFC на собственный класс Java. Тем не менее, он поддерживается только для interfaces, поскольку PNCallback это не интерфейс, на самом деле нет способа избежать написания пользовательского Java-класса, который расширяет PNCallback,

package your.package.name;

import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.presence.PNHereNowResult ;

 public class YourCallbackClass extends PNCallback<PNHereNowResult> {
    public void onResponse(PNHereNowResult result, PNStatus status) {
        // do something with the result and status here
    }
}

После компиляции добавьте его в путь к классу CF. Затем вы можете создать экземпляр своего пользовательского класса в CF и передать его в метод asynch():

</cfscript>
// .....
yourCallback = createObject("java", "your.package.name.YourCallbackClass").init();
pubNub.hereNow()
    .channels( ["ch1", "ch2", "ch3"] )
   .includeState( true )
   .includeUUIDs( true )
   .asynch( yourCallback );
</cfscript>
Другие вопросы по тегам