使用PubNub的麻烦(java对象)

时间:2016-06-06 14:41:25

标签: java coldfusion pubnub

我已将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”方法的方式不正确或者我试图显示结果的方式不正确。

任何人都可以就此提供任何帮助吗? 感谢

2 个答案:

答案 0 :(得分:0)

看起来channels是方法名称,而不是结构。 includeStateincludeUUIDs也是如此。将它们称为链式方法,并传入预期的参数。

  • channels()需要一个CF数组(即java.util.List个对象)。
  • includeStateincludeUUIDs期望一个简单的布尔值。

这样的东西应该适用于前三(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。