Проблема с использованием 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>