我已将Pubnub-4.0.0.jar文件包含到我的webroot中。 (Pubnub-4.0.0.jar可以在这里下载:https://www.pubnub.com/docs/java/pubnub-java-sdk-v4)
我正在尝试将“HERE NOW”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”方法的方式不正确或者我试图显示结果的方式不正确。
任何人都可以就此提供任何帮助吗? 感谢
答案 0 :(得分:0)
看起来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()
方法稍有不同,因为它需要某种类型的回调对象。不幸的是,看起来所有callback classes都是abstract
。 (我不知道为什么。没有一个回调类包含一个实现,所以它们的功能更像interface
。)遗憾的是,CF中没有abstract
类的等价物。
抽象类无法实例化,也不能与CF10 +中的酷Dynamic Proxy Feature一起使用。动态代理是一个灵活的功能,允许您替换CFC,用于自定义Java类。但是,它仅支持interfaces
。由于PNCallback
不是接口,因此无法避免编写扩展PNCallback
的自定义java类。
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>
答案 1 :(得分:0)
Pubnub为此提供了一个REST API调用。 https://s3.amazonaws.com/pubnub/sdk/RESTful+Documentation/index.html#presence-here-now-get Thankyou Pubnub。